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

kfm*_*e04 3 c++ enums casting c++11

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

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

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

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

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

Chr*_*odd 7

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

inline int init_pair(enum_type pair, short f, short b) {
    return init_pair(static_cast<short>(pair), f, b);
}
Run Code Online (Sandbox Code Playgroud)

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