Sta*_*als 20 c++ enums namespaces c++11
是否有点像这样做:
namespace status{
enum status{
ok,
error
};
}
Run Code Online (Sandbox Code Playgroud)
并使用它 status::ok
或者我应该这样做:
enum status{
status_ok,
status_error
};
Run Code Online (Sandbox Code Playgroud)
并像这样使用它status_ok
?
更新: 使用C++ 11,您现在应该这样做:
enum class status {
ok,
error
};
Run Code Online (Sandbox Code Playgroud)
并使用这样的: status::ok
Fre*_*abe 21
我个人不喜欢第二种变化,因为这status_
部分对我来说似乎是多余的.前一个版本避免了这个问题,但是一个类型status::status
看起来也很奇怪.此外,命名空间可以修改,所以如果有人做了类似的事情
namespace status {
void error( const char *msg );
}
Run Code Online (Sandbox Code Playgroud)
由于函数error
与您的enum
值冲突,您将收到编译器错误.
我更喜欢使用第三种变体:
struct MouseButton {
enum Value {
Left, Middle, Right
};
};
Run Code Online (Sandbox Code Playgroud)
这让我可以编写像
void handleMouseButton( MouseButton::Value b ) {
switch ( b ) {
case MouseButton::Left: // ...
case MouseButton::Middle: // ...
case MouseButton::Right: // ...
}
}
Run Code Online (Sandbox Code Playgroud)
在启用C++ 0x扩展时,您刚想要添加到C++中.但是,如果您不能使用C++ 0x功能,我建议这样做:
struct status
{
enum value
{
ok,
error
};
};
Run Code Online (Sandbox Code Playgroud)
有这样的声明你可以写:
status::value var = status::ok;
Run Code Online (Sandbox Code Playgroud)
这样的结构还允许您声明与struct
范围内的状态类型相关的函数.例如,状态struct
可以包含转换为字符串/从字符串转换的方法.
归档时间: |
|
查看次数: |
14774 次 |
最近记录: |