如何扩展依赖类型的参数包?

How to expand parameter pack for dependent types?

扩展参数包的语法是什么,我想要的类型直接取决于包中的类型?

例如:

template <typename T>
struct foo
{
   typedef T value_type;
};

template <typename ... T>
struct aggregate_of_foo
{
   typedef std::tuple<foo<T>::value_type...> tuple; // MSVC compiler error here
};

您必须使用关键字 typename,因为 value_type 在此上下文中是从属名称。

template <typename ... T>
struct aggregate_of_foo
{
    typedef std::tuple<typename foo<T>::value_type...> tuple; //here
};

如果您在 typedef 中的意思是 foo 而不是 bar,那么您只是缺少之前的 typename 关键字:

template <typename ... T>
struct aggregate_of_foo
{
   using tuple_foo =  std::tuple<typename foo<T>::value_type...>;
                      //         ^^^^^^^^
};

另请注意,我将其命名为 tuple_foo 因为这比 tuple.

更有意义