C ++ 11:从旧式枚举迁移到枚举类的正确方法是什么?

时间:2011-10-24 04:09:01

标签: c++ casting c++11 enums

我目前正将我的代码从旧式枚举迁移到枚举类。

强类型很好,但我在代码中遇到了一个问题,我需要调用ncurses的init_pair()函数,该函数将short int作为其第一个参数,但我已将其转换为枚举开发人员友好的阅读课程。

为了让编译器满意,似乎我需要在第一个参数上使用static_cast<short int>()

是否有更清洁的方法或者如果我必须使用static_cast,您如何建议我使用它?

接受的答案:Chris Dodd的回答很好。在切换之前,我在整个代表旧式枚举的地方进行了整理。在切换之后,我在其余的代码中都有一个带有类型安全枚举的脏代码。肮脏被隔离到一个地方,代码更安全,更容易阅读。这是一个显着的进步。

2 个答案:

答案 0 :(得分:7)

最干净的方法可能是定义一个重载的内联版本的init_pair,它采用枚举并强制转换为普通版本:

inline int init_pair(enum_type pair, short f, short b) {
    return init_pair(static_cast<short>(pair), f, b);
}

这样用户可以用你的枚举类型调用它,它就可以正常工作

答案 1 :(得分:3)

  

是否有更简洁的方法可以做到这一点,还是static_cast好吗?

清洁?你正在做一些不洁净的事情:取一个强类型值并将其改为另一种类型。你故意绕过类型系统。当你做一些不洁净的事情时,它应该看起来不干净。

唯一“清洁”的方法是使用C风格的演员。而且我不确定这是“更清洁”。