Tôi có một API C định nghĩa một enum như vậy:Sử dụng enums C cờ trong 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;
Có một phương pháp có sử dụng enum, định nghĩa là:
void do_something(CEnumType types);
Trong C, bạn có thể gọi một cái gì đó như:
do_something(C_ENUM_VALUE_APPLE | C_ENUM_VALUE_BANANA);
Tuy nhiên, nếu bạn cố gắng gọi nó theo cách này trong C++ (Linux, g ++ biên dịch), bạn nhận được một lỗi, chuyển đổi không hợp lệ từ ‘int’ thành ‘CEnumType’.
Cách chính xác để sử dụng API C này từ ứng dụng C++ của tôi là gì?
+1 cho sự thông minh của quá tải toán tử' | '! –
Nó thậm chí còn được xác định hành vi để có một đối tượng của loại enum có giá trị không phải là một trong các giá trị enum quy định? – bames53
Tôi khá chắc chắn toàn bộ (int) chuyển đổi này là thừa vì enum của bạn có một số loại lưu trữ đã có hoặc có thể được xác định với enum X: int {} – Andy