Joh*_*nes 6 c++ enums templates c++11
这个最小的例子编译没有警告和运行:
// 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;
}
Run Code Online (Sandbox Code Playgroud)
现在,我希望编译器my_enum
从枚举模板参数中推导出类型模板参数my_enum::x
.这样看起来会更好:
library_struct<my_enum::x> unused;
Run Code Online (Sandbox Code Playgroud)
我见过编译器能够推导出模板参数的例子,但我只允许省略模板参数列表中的最后一个模板参数.那么可以在这里省略枚举类型吗?
编辑:我对没有宏的解决方案感兴趣.
有3种方法,但都不好。
首先,您可以等待更高版本的标准:已经提出了许多解决此问题的建议。我不知道是否有人将其纳入 C++1y 中。
第二,宏。
第三,使用推导类型。这迫使枚举值最多只能是一个constexpr
参数。
简短的回答是“你不能按照你要求的去做,至少不能干净利落地”。这一混乱局面已经被注意到,也许有一天会得到解决。