如何解包类型定义的类型

How to unpack type-defined types?

本文关键字:类型 定义 何解包      更新时间:2023-10-16

例如

struct A { typedef int Type; }
struct B { typedef float Type; }
template<class... Ts>
struct C
{
    typedef tuple<Ts::Type...> TupleType; // comilation error: parameter pack 
                                          // expects a type template argument
};

如何解包类型定义的类型?

你需要typename

typedef tuple<typename Ts::Type...> TupleType;

请注意,这与您正在处理参数包的事实无关。这里需要typename的原因和平常一样。事实上,如果你有

template<class T>
struct D {
    typedef vector<typename T::type> VectorType;
};

这里也需要typename