[英]Pass C++11 enum class as template while auto deducing its type
这个最小的例子编译没有警告和运行:
// library
template<class T, T t> struct library_struct {};
// user
enum class my_enum { x, y, z };
int main()
{
library_struct<my_enum, my_enum::x> unused; // l.7
(void) unused;
return 0;
}
现在,我希望编译器从枚举模板参数my_enum::x
推导出类型模板参数my_enum
。 这样看起来会更好:
library_struct<my_enum::x> unused;
我见过编译器能够推导出模板参数的例子,但我只允许省略模板参数列表中的最后一个模板参数。 那么可以在这里省略枚举类型吗?
编辑:我对没有宏的解决方案感兴趣。
有3种方法,没有一种方法是好的。
首先,您可以等待以后的标准:已经提出了许多解决此问题的建议。 我不知道有没有把它变成C ++ 1y。
第二,宏。
第三,使用推导类型。 这会强制枚举值最多为constexpr
参数。
较短的答案是“你不能做你要求的,至少不干净”。 这个烂摊子已被注意到,有一天可能会被修复。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.