#include <iostream>
#include <typeinfo>
// пачка шаблонов для выбора действия по типу аргумента
// нужно создать по 1й функции для всех обрабатываемых типов
// это работает аля switch-case-default по типу аргумента
template<typename Arg>
void do_smth(Arg a) {
std::cout << "typeinfo of a: " << typeid(a).name() << std::endl;
}
// функция для типа int
template<>
void do_smth<int>(int a) {
std::cout << "it is int = " << a << std::endl;
}
// спец шаблон для обработки одиночного элемента
// нужен для прекращения рекурсии в обобщенном шаблоне
template<typename Arg>
void do_it(Arg a) {
do_smth(a);
}
// функция с переменным числом параметров
template<typename Arg, typename... Args>
void do_it(Arg arg, Args... args) {
do_smth(arg); // обрабатывем 1й аргумент
do_it(args...); // переходим к следующему аргументу
}
int main() {
do_it(1, 2, 3, 3.14, "test");
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZWluZm8+CgovLyDQv9Cw0YfQutCwINGI0LDQsdC70L7QvdC+0LIg0LTQu9GPINCy0YvQsdC+0YDQsCDQtNC10LnRgdGC0LLQuNGPINC/0L4g0YLQuNC/0YMg0LDRgNCz0YPQvNC10L3RgtCwCi8vINC90YPQttC90L4g0YHQvtC30LTQsNGC0Ywg0L/QviAx0Lkg0YTRg9C90LrRhtC40Lgg0LTQu9GPINCy0YHQtdGFINC+0LHRgNCw0LHQsNGC0YvQstCw0LXQvNGL0YUg0YLQuNC/0L7QsgovLyDRjdGC0L4g0YDQsNCx0L7RgtCw0LXRgiDQsNC70Y8gc3dpdGNoLWNhc2UtZGVmYXVsdCDQv9C+INGC0LjQv9GDINCw0YDQs9GD0LzQtdC90YLQsAp0ZW1wbGF0ZTx0eXBlbmFtZSBBcmc+CnZvaWQgZG9fc210aChBcmcgYSkgewogICAgc3RkOjpjb3V0IDw8ICJ0eXBlaW5mbyBvZiBhOiAiIDw8IHR5cGVpZChhKS5uYW1lKCkgPDwgc3RkOjplbmRsOwp9CgovLyDRhNGD0L3QutGG0LjRjyDQtNC70Y8g0YLQuNC/0LAgaW50CnRlbXBsYXRlPD4Kdm9pZCBkb19zbXRoPGludD4oaW50IGEpIHsKICAgIHN0ZDo6Y291dCA8PCAiaXQgaXMgaW50ID0gIiA8PCBhIDw8IHN0ZDo6ZW5kbDsKfQoKLy8g0YHQv9C10YYg0YjQsNCx0LvQvtC9INC00LvRjyDQvtCx0YDQsNCx0L7RgtC60Lgg0L7QtNC40L3QvtGH0L3QvtCz0L4g0Y3Qu9C10LzQtdC90YLQsAovLyDQvdGD0LbQtdC9INC00LvRjyDQv9GA0LXQutGA0LDRidC10L3QuNGPINGA0LXQutGD0YDRgdC40Lgg0LIg0L7QsdC+0LHRidC10L3QvdC+0Lwg0YjQsNCx0LvQvtC90LUKdGVtcGxhdGU8dHlwZW5hbWUgQXJnPgp2b2lkIGRvX2l0KEFyZyBhKSB7CiAgICBkb19zbXRoKGEpOwp9CgovLyDRhNGD0L3QutGG0LjRjyDRgSDQv9C10YDQtdC80LXQvdC90YvQvCDRh9C40YHQu9C+0Lwg0L/QsNGA0LDQvNC10YLRgNC+0LIKdGVtcGxhdGU8dHlwZW5hbWUgQXJnLCB0eXBlbmFtZS4uLiBBcmdzPgp2b2lkIGRvX2l0KEFyZyBhcmcsIEFyZ3MuLi4gYXJncykgewogICAgZG9fc210aChhcmcpOyAvLyDQvtCx0YDQsNCx0LDRgtGL0LLQtdC8IDHQuSDQsNGA0LPRg9C80LXQvdGCCiAgICBkb19pdChhcmdzLi4uKTsgLy8g0L/QtdGA0LXRhdC+0LTQuNC8INC6INGB0LvQtdC00YPRjtGJ0LXQvNGDINCw0YDQs9GD0LzQtdC90YLRgwp9CgoKaW50IG1haW4oKSB7CiAgICBkb19pdCgxLCAyLCAzLCAzLjE0LCAidGVzdCIpOwogICAgcmV0dXJuIDA7Cn0=