c++ - 如何自动将强类型枚举转换为 int?

标签 c++ c++11 strongly-typed-enum

#include <iostream>

struct a {
  enum LOCAL_A { A1, A2 };
};
enum class b { B1, B2 };

int foo(int input) { return input; }

int main(void) {
  std::cout << foo(a::A1) << std::endl;
  std::cout << foo(static_cast<int>(b::B2)) << std::endl;
}

a::LOCAL_A 是强类型枚举试图实现的,但有一点区别:普通枚举可以转换为整数类型,而强类型枚举不能没有类型转换。

那么,有没有一种方法可以将强类型枚举值转换为整数类型而无需强制转换?如果是,怎么做?

最佳答案

正如其他人所说,您不能进行隐式转换,这是设计使然。

如果您愿意,您可以避免在强制转换中指定基础类型。

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

std::cout << foo(to_underlying(b::B2)) << std::endl;

关于c++ - 如何自动将强类型枚举转换为 int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8357240/

相关文章:

c++ - 强烈枚举为整数,反之亦然

C++ 如何格式化指向类数组的指针?

c++ - 容器的 3D 网格:嵌套 std::vector 与 std::unordered_map

c++ - 不可复制、不可移动、显式构造类型的成员数组的初始化

c++ - 为什么这个程序有这种行为(push_back)?

c++ - 在成员函数的默认参数中使用强类型枚举的成员

c++ - g++-4.4 中的强类型枚举

c++ - 在 C++ 中从格式化输入切换到未格式化输入

c++ - 在可变参数模板中使用声明

c++ - 为什么这个复合语句作为由大括号和括号括起来的语句序列似乎不是有效的语句表达式