为开关/案例使用静态const类实例

教父

我有一个有点像枚举的类,它的每个实例都有一个唯一的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值不是常量表达式”错误,这似乎是因为编译器在编译时不知道这些值。

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

b4hand

case语句的参数必须是C ++ 11之前的整数常量表达式。最简单的方法是使用const intenum如果您使用的是C ++ 11,则可以简单地使用内置enum class支持。请参阅范围内的枚举

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Shapeless通用的默认实例为案例类构建具有定义通用createValue方法的参数

何时使用静态类与实例化类

重用案例类实例

使用GCC开关案例范围,是否可以构建范围为[A-Za-z]的单个案例?

在开关/案例中使用枚举

替换开关案例:接口与抽象类

如何使用较小案例类的所有属性实例化Scala案例类?

Java使用实例方法而不是类/静态方法为每个实例化对象创建唯一的ID

将静态方法定义为当前类的返回实例

使用区分符对ADT案例类进行编码,即使键入为案例类也是如此

静态类或实例指针

类Javafx的静态实例

静态const ODR类

是否有语法来防止类实例为const?

自动为案例类生成案例对象

为案例类定义对象

案例类中的静态函数(Scala)

使用TypeScript从基类中的静态方法实例化子类

使用Class.forName实例化嵌套的静态类

C#使用类的不同实例调用非静态方法

如何使用静态自实例在 UserDefaults 中保存模型类?

是否应该使用实例方法将静态方法与类分开?

实例化类以调用方法还是使用静态方法?

使用静态方法时,是否每个类都实例化?

使用静态方法实例化类依赖关系

使用模板将静态编码为实例方法蹦床功能

为使用静态哈希的实例变量创建读取方法

当从类中的静态方法而不是静态方法设置时,设置为实例的静态值可以工作吗?

为具有仅一个字段的案例类派生类型类实例