如何扩展依赖类型的参数包?
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
.
更有意义
扩展参数包的语法是什么,我想要的类型直接取决于包中的类型?
例如:
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
.