C ++嵌套循环迭代两个类型列表

时间:2020-09-17 00:36:19

标签: c++ templates types c++17 typelist

假设我有一个这样定义的函数

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);
}

0 个答案:

没有答案