fork download
  1. #include <iostream>
  2. #include <typeinfo>
  3.  
  4. // пачка шаблонов для выбора действия по типу аргумента
  5. // нужно создать по 1й функции для всех обрабатываемых типов
  6. // это работает аля switch-case-default по типу аргумента
  7. template<typename Arg>
  8. void do_smth(Arg a) {
  9. std::cout << "typeinfo of a: " << typeid(a).name() << std::endl;
  10. }
  11.  
  12. // функция для типа int
  13. template<>
  14. void do_smth<int>(int a) {
  15. std::cout << "it is int = " << a << std::endl;
  16. }
  17.  
  18. // спец шаблон для обработки одиночного элемента
  19. // нужен для прекращения рекурсии в обобщенном шаблоне
  20. template<typename Arg>
  21. void do_it(Arg a) {
  22. do_smth(a);
  23. }
  24.  
  25. // функция с переменным числом параметров
  26. template<typename Arg, typename... Args>
  27. void do_it(Arg arg, Args... args) {
  28. do_smth(arg); // обрабатывем 1й аргумент
  29. do_it(args...); // переходим к следующему аргументу
  30. }
  31.  
  32.  
  33. int main() {
  34. do_it(1, 2, 3, 3.14, "test");
  35. return 0;
  36. }
Success #stdin #stdout 0s 3140KB
stdin
Standard input is empty
stdout
it is int = 1
it is int = 2
it is int = 3
typeinfo of a: d
typeinfo of a: PKc