class A{ typedef tuple<int, double, int> list; };
class B{ typedef tuple<int, int> list; };
class C{ typedef tuple<int, double, char> list; };
template <typename... args>
class My_class{
//need a tuple type that is combination of all the tuple named list in the class A B C
};
My_class<A, B, C> obj;
如何在 in My_class 中创建 typedef 以使其等于 tuple<int, double, int, int, int, int, double, char>
?
假设您可以使A::list
、B::list
和C::list
可公开访问,您想要的是:
template <typename... Args>
class My_class{
typedef decltype(tuple_cat(declval<typename Args::list>()...)) list;
};
它看起来很丑陋,但不幸的是,没有办法在C++标准中加入元组类型。 您可以这样制作自己的tuple_flatten
:
template <typename... Tuple>
struct tuple_flatten{
typedef decltype(tuple_cat(declval<Tuple>()...)) type;
};
template <typename... Tuple>
using tuple_flatten_t = typename tuple_flatten<Tuple...>::type;
要使用:
template <typename... Args>
class My_class{
typedef typename tuple_flatten<typename Args::list...>::type list;
};
此外,根据大多数约定,类型参数(Args
)应该以大写字母开头。