【问题标题】:Pretty way to use enumarators使用枚举器的好方法
【发布时间】:2014-06-10 03:41:52
【问题描述】:

在我的代码中,我需要使用枚举器来确保只能将一组值分配给某些实例,但是,我厌倦了从 intenum 类型的转换,反之亦然。有没有像int enum 这样的东西来避免那些看起来很丑的static_casts?

【问题讨论】:

  • 嗯,有一个方向的+
  • 你是用enum class还是简单的enum
  • @RSahu:我使用enum class,因为我有不止一个enum classes,而且他们有同名的成员。
  • 您是否可以选择使用std::integral_constant 而不是enums?

标签: c++ c++11 enums type-conversion


【解决方案1】:

如果您希望允许在枚举数和基础类型的变量之间进行隐式转换,请不要使用 C++11 的作用域枚举。

enum class scoped : unsigned
{
    Enumerator_1,
};

enum /*class*/ unscoped : unsigned
{
    Enumerator_1,
};

int main()
{
    unsigned a = static_cast<unsigned>(scoped::Enumerator_1); // explicit conv
    unsigned b = unscoped::Enumerator_1;                      // implicit conv allowed
}

具体来说,不要使用enum class(或enum struct)。您仍然可以指定基础类型,但现在允许隐式转换。

Live demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-28
    • 1970-01-01
    • 1970-01-01
    • 2019-03-25
    • 1970-01-01
    • 2011-03-11
    • 2016-12-24
    • 1970-01-01
    相关资源
    最近更新 更多