Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从模板结构中为类型添加别名_C++_Templates_Visual Studio 2017 - Fatal编程技术网

C++ 从模板结构中为类型添加别名

C++ 从模板结构中为类型添加别名,c++,templates,visual-studio-2017,C++,Templates,Visual Studio 2017,我将问题缩小为: template <typename value_t, bool citrus = false> struct fruit_structs { struct fruit_base { value_t weight; }; struct banana_t : fruit_base {}; struct lemon_t : fruit_base {}; using fruit_t = typename std::conditional&

我将问题缩小为:

template <typename value_t, bool citrus = false> struct fruit_structs {
    struct fruit_base { value_t weight; };
    struct banana_t : fruit_base {};
    struct lemon_t : fruit_base {};

    using fruit_t = typename std::conditional<citrus, lemon_t, banana_t>::type;
};

template<typename value_t> using banana_struct = fruit_structs<value_t, false>::fruit_t;
template<typename value_t> using lemon_struct = fruit_structs<value_t, true>::fruit_t;
模板结构{
结构水果基础{value\u t weight;};
结构香蕉:果基{};
柠檬结构:果基{};
使用fruit\u t=typename std::conditional::type;
};
使用香蕉结构=水果结构::水果结构的模板;
使用lemon\u struct=fruit\u structs::fruit\u t的模板;
实际上,banana_t和lemon_t共享许多逻辑和特定于价值的实用程序,因此我看到的选项要么是非常冗余的模板专门化,要么就是这个。问题是它不起作用,因此这篇文章


Intellisence在我尝试使用别名的最后一行中声明“语法错误:标识符'fruit'”。为什么会这样?

编译器无法确定引用的是类型。通过在typename关键字前加前缀使其显式:

template<typename value_t> using banana_struct = typename fruit_structs<value_t, false>::fruit_t;

template<typename value_t> using lemon_struct = typename fruit_structs<value_t, true>::fruit_t;
使用香蕉结构的模板=typename fruit\u structs::fruit\t;
使用lemon\u struct=typename fruit\u structs::fruit\t的模板;

您就快到了,您只需要依赖类型上的
typename