对开关/ case使用静态const类实例

时间:2014-10-31 15:41:31

标签: c++ switch-statement constants

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

我得到"案例值不是一个常数表达式"错误似乎是因为编译器在编译时不知道这些值。

有什么方法可以让它发挥作用吗?

1 个答案:

答案 0 :(得分:2)

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