假设我有一个这样定义的函数
template<typename A, typename B>
void MyFunc(std::string c) {
std::cout << "Apply " << c << " from " << A::Name << " to " << B::Name << std::endl;
}
我的目标是对两组结构的所有配对运行MyFunc()
。因此,如果我具有以下结构:
// Set 1
Struct A{ static constexpr char kName[] = "A"; };
Struct B{ static constexpr char kName[] = "B"; };
Struct C{ static constexpr char kName[] = "C"; };
// Set 2
Struct X{ static constexpr char kName[] = "X"; };
Struct Y{ static constexpr char kName[] = "Y"; };
然后,我想创建一个枚举以下调用的函数:
MyFunc<A,X>("transition");
MyFunc<A,Y>("transition");
MyFunc<B,X>("transition");
MyFunc<B,Y>("transition");
MyFunc<C,X>("transition");
MyFunc<C,Y>("transition");
所以我的想法是创建一个类型级别列表和函数,该列表和函数可以执行以下操作,除了我在C ++元编程中不愿意做以下工作之外:
template<typename... Types>
struct TypeList{};
TypeList<A,B,C> t1;
TypeList<X,Y> t2;
template<TypeList A, TypeList B>
void CrossProduct(int a) {
// For i_th Type in TypeListA
// For j_th Types in TypeListB
MyFunc<Type<i>,Type<j>>(a);
}