我有一个C API,它定义了一个枚举,如下所示:

typedef enum
{
  C_ENUM_VALUE_NONE    = 0,
  C_ENUM_VALUE_APPLE   = (1 << 0),
  C_ENUM_VALUE_BANANA  = (1 << 1),
  C_ENUM_VALUE_COCONUT = (1 << 2),
  // etc.
  C_ENUM_VALUE_ANY     = ~0
} CEnumType;

有一种使用枚举的方法,定义为:
void do_something(CEnumType types);

在C语言中,您可以这样调用:
do_something(C_ENUM_VALUE_APPLE | C_ENUM_VALUE_BANANA);

但是,如果您尝试在C++(Linux,g++编译器)中以这种方式调用它,则会收到错误消息,即从“int”到“CEnumType”的无效转换。

在我的C++应用程序中使用此C API的正确方法是什么?

最佳答案

您需要在C++中将int强制转换为枚举,但是您可以在自定义OR运算符中隐藏强制转换:

CEnumType operator|(CEnumType lhs, CEnumType rhs) {
    return (CEnumType) ((int)lhs| (int)rhs);
}

有了这个运算符,您就可以编写原始文件了
do_something(C_ENUM_VALUE_APPLE | C_ENUM_VALUE_BANANA);

它将编译并运行没有问题。

10-08 04:11