繁体   English   中英

将C ++ 11枚举类作为模板传递,同时自动推断其类型

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM