【问题标题】:How can I make easy job to casting enum member to int?如何轻松地将枚举成员转换为 int?
【发布时间】:2014-05-06 16:54:15
【问题描述】:

如何轻松地将枚举成员转换为 int?我知道enum class 不能有成员函数。但是没有任何方法可以做类似myEnum::foo.toInt() 的事情吗?我正在寻找static_cast<int>(myEnum::foo) 的替代品,因为每次我需要将其放入int 变量时都需要进行大量输入,而我不会想使用旧的enum(非enum class),因为我想安全地输入类型并且每个枚举都有自己的范围。

【问题讨论】:

  • 如果你经常投射,那你就做错了。
  • “Easy cast”“类型安全”听起来有点矛盾。
  • 这已经很容易了。不确定为什么需要 static_cast 将枚举成员分配给 int,因为枚举成员已经是整数类型。 (枚举 eColors { eRed, eGreen, eBlue }; int red = eRed;)

标签: c++ c++11 enums


【解决方案1】:

考虑使用将任何枚举值转换为其基础类型的实用函数:

template<typename Enum>
typename std::underlying_type<Enum>::type to_underlying(Enum e) {
    return static_cast<typename std::underlying_type<Enum>::type>(e);
}

然后你可以写:

to_underlying(Enum::foo);

【讨论】:

  • 我自己称它为to_integral(因为它将其转换为底层整数类型,并且积分比底层短)。
  • 如果声明为enum class : char,这个函数也会返回char类型吗?
  • @ecatmur:我的编译器似乎不支持它:命名空间“std”中没有名为“underlying_type”的类型我错过了什么? (我使用的是 clang 3.3)
  • @Jack underlying_type&lt;type_traits&gt;
  • 我包含了这个和&lt;iostream&gt;
猜你喜欢
  • 2010-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-30
  • 2013-06-02
  • 2010-09-17
相关资源
最近更新 更多