如何类型定义作为其他元组串联的元组


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::listB::listC::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)应该以大写字母开头。

最新更新