从模板结构中别名类型
aliasing a type from a template struct
我将问题缩小为:
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;
实际上,banana_t 和 lemon_t 共享很多逻辑和 value_t 特定的实用程序,所以我看到它们的选项要么是一个可怕的冗余模板专业化,要么就是这个。问题是它不起作用,因此 post.
Intellisence 在我尝试别名的最后几行声明“语法错误:标识符 'fruit_t'”。这是为什么?
你的编译器不能确定你引用的是一个类型。通过在 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;
我将问题缩小为:
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;
实际上,banana_t 和 lemon_t 共享很多逻辑和 value_t 特定的实用程序,所以我看到它们的选项要么是一个可怕的冗余模板专业化,要么就是这个。问题是它不起作用,因此 post.
Intellisence 在我尝试别名的最后几行声明“语法错误:标识符 'fruit_t'”。这是为什么?
你的编译器不能确定你引用的是一个类型。通过在 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;