如何从 C++ 模板中解压 std::tuple?

Tat*_*kow 6 c++ templates tuples c++17

我有一个类,预计将采用std::tuple某些类型(允许任意计数)作为模板参数。我想声明一个类型向量的元组。例如,我有

template <typename T>
class MyClass {/*...*/}
Run Code Online (Sandbox Code Playgroud)

我实例化它

MyClass<std::tuple<int, bool>> my_class;
Run Code Online (Sandbox Code Playgroud)

我的目标是创造一个这样的领域

std::tuple<std::vector<int>, std::vector<bool>> my_tuple;
Run Code Online (Sandbox Code Playgroud)

我知道如果我有一个类定义

template <typename... T>
class MyClass2 {/*...*/}
Run Code Online (Sandbox Code Playgroud)

我可以通过传递没有元组的数据类型来实例化它

MyClass<int, bool> my_class2;
Run Code Online (Sandbox Code Playgroud)

然后简单地创建字段

std::tuple<std::vector<int>, std::vector<bool>> my_tuple2;
Run Code Online (Sandbox Code Playgroud)

使用

std::tuple<std::vector<T>...> my_tuple2;
Run Code Online (Sandbox Code Playgroud)

因此,我想我应该以某种方式从元组中解压缩数据类型。是否可以?

Tra*_*vis 4

是的,为了添加 cigien 的答案,另一种方法是通过模板专业化来解压它。

template<typename Tuple>
class MyClass;

template<typename... Ts>
class MyClass<std::tuple<Ts...>>
{
    // ...
    using VectorTuple = std::tuple<std::vector<Ts>...>;
    // ...
};
Run Code Online (Sandbox Code Playgroud)