我已经定义了一个这样的类型列表:
template <typename ... Types> struct typelist {};
using my_list = typelist<int, double, bool, float>;
现在我有一个功能模板,例如template<typename T>
void foo() {
std::cout << typeid(T).name() << std::endl;
}
并希望为类型列表中的每种类型调用此方法:foo<int>();
foo<double>();
foo<bool>();
foo<float>();
我试图找到一种递归的方法来解决此问题,但是我无法为所需的foo函数定义正确的(可能是嵌套的)可变参数模板。您是否有解决此问题的巧妙方法的暗示? 最佳答案
template<class... Types> auto foo_foreach(typelist<Types...>) {
return (foo<Types>(), ...);
}
int main() {
foo_foreach(my_list{});
}
对于真正的老式学校来说,请使用您之前尝试过的模板递归:void foo_foreach(typelist<>) {}
template<class Head, class... Tail> void foo_foreach(typelist<Head, Tail...>);
template<class Head, class... Tail> void foo_foreach(typelist<Head, Tail...>) {
foo<Head>();
foo_foreach(typelist<Tail...>{});
}
关于c++ - 在可变参数模板类型列表的每种类型上运行的函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63594125/