转换参数包类型

Ale*_*uch 5 c++ templates c++11 c++17

我有多个类共享相同的公共typedef,如

struct A { using Container = std::array<A, 3>; };
struct B { using Container = std::vector<B>; };
struct C { using Container = std::array<C, 5>; };
Run Code Online (Sandbox Code Playgroud)

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

template <typename... Modules>
struct Collector
{
std::tuple<Modules...::Container> mContainers;
};
Run Code Online (Sandbox Code Playgroud)

::Container在打开包装时是否有一种优雅的方式来应用?

Wor*_*der 10

您可以使用辅助特征

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

template <typename... Modules>
struct Collector
{
std::tuple<ContainerOf<Modules>...> mContainers;
};
Run Code Online (Sandbox Code Playgroud)

或者,您也可以在没有辅助特征的情况下内联此特征:

template <typename... Modules>
struct Collector
{
std::tuple<typename Modules::Container...> mContainers;
};
Run Code Online (Sandbox Code Playgroud)