我有一个类似于枚举的类,它的每个实例都有一个唯一的int值,从0开始,每个新实例都递增。
class MyEnumLikeClass
{
static int NextId = 0;
static const MyEnumLikeClass FIRST;
static const MyEnumLikeClass SECOND;
const int val_;
public :
MyEnumLikeClass() : val_(NextId++)
{
}
operator int() const
{
return val_;
}
//other methods (usually getters) omitted for clarity
}
我正在尝试在开关盒中使用它,以便我可以执行类似
的操作MyEnumLikeClass value;
switch(value)
{
case MyEnumLikeClass::FIRST :
break;
case MyEnumLikeClass::SECOND :
break;
default :
}
我得到"案例值不是一个常数表达式"错误似乎是因为编译器在编译时不知道这些值。
有什么方法可以让它发挥作用吗?
答案 0 :(得分:2)
case
语句的参数必须是C ++ 11之前的整型常量表达式。最简单的方法是使用const int
或实际enum
。如果您使用的是C ++ 11,那么您只需使用内置的enum class
支持即可。请参阅scoped enumerations。