有范围但“半弱”类型的枚举

加西姆

我想使用范围格式的枚举,但是能够在枚举和无符号整数之间进行比较和赋值。

这是我尝试过的下面的代码,它可以正常工作:

class SystemEvents {
public:
    enum {
        Opened, Closed
    };
};

class OtherEvents {
public:
  enum {
     Closed,Opened
  };
};

//test
uint32_t e = SystemEvents::Opened;
if(e == OtherEvents::Closed) std::cout << "enums are weakly typed and scoped"; 

但是我想知道是否可以使用C ++ 11语法做到这一点?

enum class SystemEvents : uint32_t {
   Opened,Closed
};

enum class OtherEvents : uint32_t {
   Closed,Opened
};

//test
uint32_t e = SystemEvents::Opened;
if(e == OtherEvents::Closed) std::cout << "enums are weakly typed and scoped"; 

上面的代码给了我预期的错误Cannot initialize a variable of type int with an rvalue of type SystemEvents因此,我应该坚持使用C风格的范围枚举,还是在C ++ 11中有办法做到这一点?还是有其他方法可以做到这一点?

丹尼尔·弗雷(Daniel Frey)

对于初始化,除了强制转换值外,您无能为力。请注意,C ++ 11的强类型枚举并不是要替换现有的枚举,而是对其进行补充。如果您想要一个弱类型的枚举,请不要使用enum class

为了比较强类型的枚举,可以声明必要的运算符并在实现内部进行强制转换:

bool operator==( uint32_t lhs, SystemEvents rhs )
{
    return static_cast< SystemEvent >( lhs ) == rhs;
}

当然,您需要两个方向:

bool operator==( SystemEvents lhs, uint32_t rhs );

和其他运算符一样!=

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

枚举类型的范围

来自分类Dev

表达式必须具有算术或非范围枚举类型

来自分类Dev

Groovy半独有范围的奇怪行为

来自分类Dev

非固定类型的枚举范围定义的动机

来自分类Dev

非固定类型的枚举范围定义的动机

来自分类Dev

流无弱类型警告:具有默认值的弱类型的可选参数

来自分类Dev

项目Euler#3获取Intellisense表达式必须具有整数或无范围的枚举类型吗?

来自分类Dev

C#想知道是否有任何枚举类型仅在限制范围内重复其值

来自分类Dev

范围枚举

来自分类Dev

枚举不是枚举映射的有效类型

来自分类Dev

获取没有类型的枚举关联值

来自分类Dev

具有多个值类型的Java枚举

来自分类Dev

如何检查具有多个值的枚举类型参数是否具有特定的枚举类型

来自分类Dev

如何获取具有枚举类型名称和枚举选项名称的枚举值

来自分类Dev

不受范围限制的枚举仍然有用吗?

来自分类Dev

获取枚举类型并创建该类型的列表,获取类类型并创建具有反射类型的列表

来自分类Dev

在Ada中,是否有一种方法可以使枚举类型像模数类型一样工作-在它的最后一个范围后包装为0?

来自分类Dev

宏以获取块的弱类型

来自分类Dev

宏以获取块的弱类型

来自分类Dev

从C#中的int是否有类型安全的枚举转换?

来自分类Dev

Qt-Q_DECLARE_METATYPE()具有枚举类类型

来自分类Dev

swift:具有类型和值的枚举常量

来自分类Dev

EF6忽略(NotMapped)所有枚举类型属性

来自分类Dev

错误:表达式必须具有整数或枚举类型

来自分类Dev

特定枚举类型的“集合”,但具有泛型

来自分类Dev

具有通用枚举和通用协议的Swift类型擦除

来自分类Dev

rails 4.1无法获取所有枚举类型

来自分类Dev

带有枚举键和不同值类型的映射

来自分类Dev

我们如何扩展所有枚举类型?

Related 相关文章

  1. 1

    枚举类型的范围

  2. 2

    表达式必须具有算术或非范围枚举类型

  3. 3

    Groovy半独有范围的奇怪行为

  4. 4

    非固定类型的枚举范围定义的动机

  5. 5

    非固定类型的枚举范围定义的动机

  6. 6

    流无弱类型警告:具有默认值的弱类型的可选参数

  7. 7

    项目Euler#3获取Intellisense表达式必须具有整数或无范围的枚举类型吗?

  8. 8

    C#想知道是否有任何枚举类型仅在限制范围内重复其值

  9. 9

    范围枚举

  10. 10

    枚举不是枚举映射的有效类型

  11. 11

    获取没有类型的枚举关联值

  12. 12

    具有多个值类型的Java枚举

  13. 13

    如何检查具有多个值的枚举类型参数是否具有特定的枚举类型

  14. 14

    如何获取具有枚举类型名称和枚举选项名称的枚举值

  15. 15

    不受范围限制的枚举仍然有用吗?

  16. 16

    获取枚举类型并创建该类型的列表,获取类类型并创建具有反射类型的列表

  17. 17

    在Ada中,是否有一种方法可以使枚举类型像模数类型一样工作-在它的最后一个范围后包装为0?

  18. 18

    宏以获取块的弱类型

  19. 19

    宏以获取块的弱类型

  20. 20

    从C#中的int是否有类型安全的枚举转换?

  21. 21

    Qt-Q_DECLARE_METATYPE()具有枚举类类型

  22. 22

    swift:具有类型和值的枚举常量

  23. 23

    EF6忽略(NotMapped)所有枚举类型属性

  24. 24

    错误:表达式必须具有整数或枚举类型

  25. 25

    特定枚举类型的“集合”,但具有泛型

  26. 26

    具有通用枚举和通用协议的Swift类型擦除

  27. 27

    rails 4.1无法获取所有枚举类型

  28. 28

    带有枚举键和不同值类型的映射

  29. 29

    我们如何扩展所有枚举类型?

热门标签

归档