转换参数包类型

时间:2018-11-19 00:16:05

标签: c++ c++11 templates c++17

我有多个共享相同公共类型定义的类,例如

struct A { using Container = std::array<A, 3>; };
struct B { using Container = std::vector<B>; };
struct C { using Container = std::array<C, 5>; };

现在我有一个类,该类获取仅包含有效类的参数包,但它必须存储容器的元组。伪代码:

template <typename... Modules>
struct Collector
{
std::tuple<Modules...::Container> mContainers;
};

在拆包过程中是否有一种优雅的方法来应用::Container

1 个答案:

答案 0 :(得分:10)

您可以使用助手特质

template<typename T>
using ContainerOf = typename T::Container;

template <typename... Modules>
struct Collector
{
std::tuple<ContainerOf<Modules>...> mContainers;
};

或者,您也可以像没有辅助特性那样内联此特性:

template <typename... Modules>
struct Collector
{
std::tuple<typename Modules::Container...> mContainers;
};