我已经定义了一个这样的类型列表:

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/

10-11 21:40