c++ - 为枚举类重载强制转换运算符

标签 c++ c++11 enums casting

在我的项目中,我使用了多个枚举类,我需要根据需要在它们之间轻松转换它们。它们基本上描述相同的事物,但命名不同,以使代码更易于使用。以下是枚举类:

enum class tetroType {
    None, I, O, T, J, L, S, Z
};

enum class gridBlock {
    Empty, Blue, Green, Orange, Purple, Red, Teal, Yellow
};

tetroType 中的每个值对应于 gridBlock 中的一个值(例如 tetroType::I = gridBlock::Teal),但第一个保存有关 tetronimo 形状的信息(在 tetronimo 类中),第二个保存有关颜色的信息 block (在网格类中)。我知道我可以只使用一个枚举,但这样你就不会丢失任何信息。如果可能的话,我还需要将它转换成字符串。这就是我想使用它的方式:

gridBlock grid = (gridBlock)tetroType::I;
string texture = (string)grid;

目前我的设置方式是这样的。每当我需要将一个枚举转换为另一个枚举或转换为字符串时,我都会在其他方法中间使用此开关:

switch (type) {
case tetroType::I:
    block = gridBlock::Teal;
    break;
case tetroType::O:
    block = gridBlock::Yellow;
    break;
case tetroType::T:
    block = gridBlock::Purple;
    break;
case tetroType::J:
    block = gridBlock::Blue;
    break;
case tetroType::L:
    block = gridBlock::Orange;
    break;
case tetroType::S:
    block = gridBlock::Green;
    break;
case tetroType::Z:
    block = gridBlock::Red;
    break;
case tetroType::None:
    block = gridBlock::Empty;
}

最佳答案

简单的答案:不要使用enum class,而是使用普通的enum,它们可以被隐式转换为它们的底层类型(默认int) .

在 C++ 11 中,enum class 是一个强别名,HAS 可以从中转换。

关于c++ - 为枚举类重载强制转换运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42166434/

相关文章:

c++ - 保存由 OpenCV 上的 Hough Circle 检测到的圆圈内的内容

c++ - initializer_list后面 "hidden array"的存储

c++ - 将函数分配给 std::function 类型时调用哪个函数原型(prototype)(以及如何调用)?

c - 事实与枚举

java - 为什么这个枚举代码是对静态字段的非法引用?

c++ - C : advantages and disadvantages 中的另一种字符串实现

c++ - 在预览中缩放图像

c++ - 错误 : No matching overloaded function found

c++ - 在 C++11 中传递具有未指定参数的函数?

c++ - "Where"这个重载运算符是否接受 "out"?