我有一个行为有点像枚举的类,它的每个实例都有一个唯一的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 :
}


我收到“ case值不是常量表达式”错误,这似乎是因为编译器在编译时不知道这些值。

有什么办法可以使它正常工作吗?

最佳答案

case语句的参数必须是C ++ 11之前的整数常量表达式。最简单的方法是使用const int或实际的enum。如果您使用的是C ++ 11,则可以简单地使用内置的enum class支持。请参见scoped enumerations

08-06 14:33