I tienen una API C que define una enumeración de este modo:Uso de enumeraciones bandera C en C++
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;
hay un método que utiliza la enumeración, se define como:
void do_something(CEnumType types);
En C, puede llamar algo así como:
do_something(C_ENUM_VALUE_APPLE | C_ENUM_VALUE_BANANA);
Sin embargo, si se intenta llamar de esta manera en C++ (Linux, compilador g ++), se produce un error, conversión no válida de 'int' a 'CEnumType'.
¿Cuál es la forma correcta de utilizar esta API C desde mi aplicación C++?
+1 por la astucia de sobrecargar el operador' | '! –
¿Es un comportamiento bien definido tener un objeto de tipo enum cuyo valor no es uno de los valores enum especificados? – bames53
Estoy bastante seguro de que esta conversión (int) completa es redundante porque tu enumeración ya tiene algún tipo de almacenamiento o puede especificarse con enum X: int {} – Andy