C++ 在C+上迭代+;可变模板类型表

C++ 在C+上迭代+;可变模板类型表,c++,variadic-templates,C++,Variadic Templates,假设我使用可变模板作为类型列表: template <typename ... Types> struct tl {}; using my_list = tl<MyTypeA, MyTypeB, MyTypeC>; 模板结构tl{}; 使用my_list=tl; 现在,我想为每种类型调用一个模板函数,例如: myFunc<MyTypeA>(); myFunc<MyTypeB>(); myFunc(); myFunc(); 如何实现这一点?对

假设我使用可变模板作为类型列表:

template <typename ... Types> struct tl {};
using my_list = tl<MyTypeA, MyTypeB, MyTypeC>;
模板结构tl{};
使用my_list=tl;
现在,我想为每种类型调用一个模板函数,例如:

myFunc<MyTypeA>();
myFunc<MyTypeB>();
myFunc();
myFunc();

如何实现这一点?

对于C++17,您可以使用折叠表达式

template <typename ...Ts>
void call_my_func(my_list<Ts...> )
{
    (myFunc<Ts>(), ...);
}
模板
无效调用我的函数(我的列表)
{
(myFunc(),…);
}
使用c++17可以使用

模板
void callMyFunc(我的列表){
(myFunc(),…);
}
C++11版本:

模板
无效forEachMyFunc(tl)
{
int dummy[]={
(myFunc(),0)。。。
};
(无效)假人;
}

这是:

模板
类MyFunc{
公众:
void运算符()()常量{
myFunc();
}
};
模板
void forEachTypeDo(tl)
{
int虚拟[]{
(F{}(),0)。。。
};
(无效)假人;
}
...
forEachTypeDo(我的列表{});

Heh,我们的答案非常相似,我不小心编辑了你的答案。
template <typename ... Types>
void callMyFunc(my_list<Types...>) {
    (myFunc<Types>(), ...);
}