如果我具有普通(弱)枚举,则可以将其枚举值用作非类型模板参数,如下所示: 通用标签

并将其称为:magic<Cat>(t)

据我所知,如果我有一个强类型的枚举并且不想对枚举类型进行硬编码,那么我最终得到: 通用标签

现在我必须写:magic<Animal, Animal::Cat>(t),这似乎是多余的。

有什么办法可以避免同时输入枚举类和值 通用标签

有帮助吗?

解决方案

如果可以使用C ++ 17,则可以这样操作 通用标签

演示: http://coliru.stacked-crooked.com/a/9ac5095e8434c9da

其他提示

对不起,我必须告诉你

不可能

采用该宏,将其放入一个可怕的命名头中,并防止其受到同事的清理脚本的破坏。希望最好的。

如果您只对enum的值感兴趣,而对它的类型不感兴趣,则应该能够使用constexpr函数将值转换为整数,避免重复输入类型名。 通用标签

但是,正如其他人已经指出的那样,如果您也想使它依赖于类型,那么它将无法正常工作。

此问题具有已接受的答案(已批准)。

在重构自己的代码时,我想出了一个更完整的解决方案:

第1步:使用我正在编写的代码: 通用标签

第2步:客户代码: 通用标签

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top