Я хочу написать шаблон функции, который может принимать переменное число аргументов шаблона, и просто распечатать typeid (). Name () параметров типа. Я могу сделать что-то подобное, используя статические функции внутри шаблонов классов, следующим образом:
template<typename...>
struct foo;
template<typename H, typename... T>
struct foo<H, T...> {
static void print() {
std::cout << typeid(H).name() << ", ";
foo<T...>::print();
}
};
template<typename H>
struct foo<H> {
static void print() {
std::cout << typeid(H).name() << "\n";
}
};
int main(void)
{
foo<int, float>::print();
return 0;
}
Однако я не могу сделать следующее:
template<typename H, typename... T>
void print() {
std::cout << typeid(H).name() << ", ";
print<T...>();
}
int main(void)
{
print<int, float>();
return 0;
}
Я попытался добавить следующие «базовые» случаи:
template<typename H>
void print();
и
void print();
Ни сработало. Как мне написать такой шаблон функции?