【发布时间】:2012-11-03 20:18:37
【问题描述】:
我有枚举类,比如说
enum class Enum{
var1, var2;
}
现在我想添加一些取决于参数的成员,即var3(int)。好的,它不是用于枚举,所以我想通过普通类来改变它,但我的目标是让旧代码(Enum::var1 作为Enum 类型的值)可以编译。
我尝试过这样做(暂时忘记var3,它将是静态函数):
class Enum{
public:
const static Enum var1 = Enum(1);
const static Enum var2 = Enum(2);
private:
Enum(int v):v(v){
}
int v;
//operator == using v
};
但它无法编译,因为 Enum 的类型不完整。
我不能在课后声明它,因为它在标题中,所以它不能与多个 cpp 一起使用。此外,这里有公共构造函数也不是什么好主意。
有什么想法吗?
【问题讨论】:
-
最大的问题是你不能在需要常量表达式的地方使用
Enum::var1。 -
@Xeo1: constexpr 会修复它吗?顺便说一句,不需要使用 as constexpr(现在,也许)
-
不,因为类类型不能用作非类型模板参数。
-
@Xeo:无论如何,如果我想添加一些取决于参数的东西,我永远不会有这个优势:),但是感谢有用的评论。
-
您希望每个人都可以像以前一样使用
Enum::var1。但是,如果var1现在是Enum类型,而Enum是类类型,而您之前在常量表达式中使用了Enum::var1,则代码将不再编译。
标签: c++ enums c++11 static-members enum-class