考虑以下类型。
template<int data_>
struct CompileTimeData{ static constexpr int data = data_; };
template<int data>
struct S{};
在 C++17 中,如何将不同 CompileTimeData 实例的元组转换为不同 S 实例的元组?该数据应用作 S 的模板参数。
std::tuple<CompileTimeData<4>, CompileTimeData<2>> ---> std::tuple<S<4>, S<2>>
我的用例如下所示:
template<class DataTupleA, class DataTupleB>
struct X{
using TupleOfS_A = ... // convert from DataTupleA
using TupleOfS_B = ... // convert from DataTupleB
};
X<
std::tuple<CompileTimeData<4>, CompileTimeData<2>>,
std::tuple<CompileTimeData<3>, CompileTimeData<5>>
> x;
您可以为此创建一个特征
template <typename Tuple>
struct myTransform;
template <int... Ns>
struct myTransform<std::tuple<CompileTimeData<Ns>...>>
{
using type = std::tuple<S<Ns>...>;
};