Мне лично не нравится второй вариант, потому что часть status_
кажется мне излишней.Предыдущая версия позволяет избежать этой проблемы, но тип status::status
тоже выглядит странно.Кроме того, пространство имен открыто для модификации, поэтому в случае, если кто-то сделал что-то вроде
namespace status {
void error( const char *msg );
}
, вы получите ошибку компилятора, поскольку функция error
конфликтует с вашим значением enum
.
Я предпочитаю использовать третий вариант:
struct MouseButton {
enum Value {
Left, Middle, Right
};
};
Это позволяет мне писать такие функции, как
void handleMouseButton( MouseButton::Value b ) {
switch ( b ) {
case MouseButton::Left: // ...
case MouseButton::Middle: // ...
case MouseButton::Right: // ...
}
}