我有多个共享相同公共类型定义的类,例如
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
?
答案 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;
};