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

问题描述

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

例如:

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
};

解决方法

如果您在foo中使用bar而不是typedef,则之前只是缺少typename关键字:

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

还请注意,我将其命名为tuple_foo,因为这比仅拥有tuple更有意义。

,

您必须使用关键字typename,因为在这种情况下value_type是一个从属名称。

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...