如何使用元组类型作为模板参数将类型元组转换为类模板实例化元组

问题描述 投票:0回答:1

考虑以下类型。

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;

c++ c++17 template-meta-programming
1个回答
0
投票

您可以为此创建一个特征

template <typename Tuple>
struct myTransform;

template <int... Ns>
struct myTransform<std::tuple<CompileTimeData<Ns>...>>
{
    using type = std::tuple<S<Ns>...>;
};
© www.soinside.com 2019 - 2024. All rights reserved.