2015-04-18 11 views
5

tôi nhận thấy rằng nếu tôi làm điều gì đó như thế này trong C++ sử dụng Microsoft Visual Studio Express 2013:đẹp cách để tuyên bố sự đếm trong C++ mà không sưng không gian tên

namespace LogLevelEnum { 
enum Type { 
    ALL, 
    FINEST, 
    FINE, 
    INFO, 
    WARNING, 
    SEVERE, 
    OFF 
}; 
} 
typedef LogLevelEnum::Type LogLevel; 

tôi có thể truy cập vào enum mục sử dụng những thứ như LogLevel::INFOLogLevel::WARNING, nhưng không phải chỉ đơn giản là thực hiện INFO hoặc WARNING. Tôi thích nó theo cách đó bởi vì nó không đặt nhiều ký hiệu vào không gian tên bao trùm.

Tuy nhiên, tôi đã tự hỏi liệu đây có phải là hành vi tiêu chuẩn hay không. Tôi biết các lớp học và không gian tên có thể được lập chỉ mục bằng cách sử dụng toán tử ::, nhưng nó làm cho một chút ít ý nghĩa cho rằng để còn làm việc trên enums, coi họ chỉ đơn giản là đổ tất cả mọi thứ trong không gian tên nó trong.

+1

Chỉ cần sử dụng [enoped enum] (http://en.cppreference.com/w/cpp/language/enum). – chris

+0

C++ 11 lớp học enum? –

+0

@chris: Ah, tôi không biết về những điều này. Tôi đoán tôi sẽ sử dụng chúng. Tôi vẫn tự hỏi làm thế nào chính xác hành vi của những gì tôi đã sử dụng được xác định, mặc dù. – RPFeltz

Trả lời

4

Tuy nhiên, tôi đã tự hỏi có hay không đây là hành vi tiêu chuẩn.

Có điều kiện bạn đang sử dụng trình biên dịch tuân thủ C++ 11 và theo tiêu chuẩn bạn đang tham chiếu đến tiêu chuẩn C++ 11.

nhưng không phải chỉ đơn giản là thực hiện INFO hoặc CẢNH BÁO.

Điều này là do enum nằm trong phạm vi không gian tên. Bạn đã thử LogLevelEnum ::INFO hoặc LogLevelEnum ::WARNING chưa?

đẹp cách để tuyên bố sự đếm trong C++ mà không sưng không gian tên

Sử dụng Scoped enumerations ví dụ: enum struct | class thay vì enum trong khi xác định enum.

+0

Về * "Điều này là do enum nằm trong phạm vi không gian tên. Bạn đã thử LogLevelEnum :: INFO hoặc LogLevelEnum :: WARNING?" *, Đó là ý định của tôi. Lưu ý cách tôi nói * "Tôi thích nó theo cách đó bởi vì nó không đặt nhiều ký hiệu vào không gian tên bao trùm." * Vì câu trả lời của bạn về cơ bản là tóm tắt các nhận xét và các bình luận đã trả lời câu hỏi của tôi, tôi sẽ chấp nhận nó. – RPFeltz

Các vấn đề liên quan