Tôi đã cố gắng đọc một chút tiêu chuẩn C++ để tìm ra cách làm việc của enum. Thực sự có nhiều hơn tôi nghĩ ban đầu.Loại nằm dưới của một C++ enum trong C++ 0x
Đối với một kiểu liệt kê phạm vi, rõ ràng là loại cơ bản là int
trừ khi được quy định khác với mệnh đề enum-base (nó có thể là bất kỳ loại tích phân nào).
enum class color { red, green, blue}; // these are int
Đối với các liệt kê chưa được kiểm tra, có vẻ như loại cơ bản có thể là loại tích phân sẽ hoạt động và không lớn hơn int, trừ khi cần.
enum color { red, green, blue}; // underlying type may vary
Vì loại cơ bản của enumarations chưa được điều chỉnh không được chuẩn hóa, cách tốt nhất để xử lý trường hợp tuần tự hóa là gì? Cho đến nay, tôi đã chuyển đổi thành int
khi viết sau đó tuần tự hóa thành một số int
và đặt biến số enum
của mình trong một chuyển đổi khi đọc, nhưng có vẻ hơi phức tạp. Có cách nào tốt hơn?
enum color { red, green, blue };
color c = red;
// to serialize
archive << (int)c;
// to deserialize
int i;
archive >> i;
switch(i) {
case 0: c = red; break;
case 1: c = green; break;
case 2: c = blue; break;
}
enum lớp chỉ là C++ 0x ... – Klaim
+1, không chắc chắn lý do tại sao câu hỏi này đã được -1ed ... –
Có thể vì người hỏi dường như không thể phân biệt giữa một hiện có và một tài liệu tiêu chuẩn đề xuất? –