23

我有一种使用 C++ 语言的情况,其中我有从 1 到 7 的整数值用于输入到 weekdays 的方法中。因为我可以轻松地将枚举类类型转换为整数static_cast,但是从整数转换为枚举有点问题。引发的问题 - 是否可以将数字转换为枚举类类型?因为在另一种生成整数的方法中,必须调用基于枚举类工作日输入的方法进行工作日更新。该更新方法仅采用 enum 类类型,即 enum class weekday { Monday =1, . . 星期日 }

方法是void updateWeekday(weekday e)

有人可以帮忙吗?

4

1 回答 1

26

是的,您可以两种方式进行转换:int 到 enum classenum class 到 int。这个例子应该是不言自明的:

enum class Color{Red = 1, Yellow = 2, Green = 3, Blue = 4};
std::cout << static_cast<int>(Color::Green) << std::endl; // 3
// more flexible static_cast - See Tony's comment below
std::cout << static_cast<std::underlying_type_t<Color>>(Color::Green) << std::endl; // 3
std::cout << (Color::Green == static_cast<Color>(3)) << std::endl; // 1
std::cout << (Color::Green == static_cast<Color>(2)) << std::endl; // 0

你可以在这里自己试试。


[编辑] 自 C++23 以来,我们将有可用std::to_underlying的 (at <utility>),这将允许我们编写:

std::cout << std::to_underlying(Color::Green) << std::endl; // 3
于 2018-11-05T05:10:59.123 回答