C++中的枚举有一个主要问题:你不能在两个不同的枚举中有一个名字,如下所示:
enum Browser
{
None = 0,
Chrome = 1,
Firefox = 2
}
enum OS
{
None = 0,
XP = 1,
Windows7 = 2
}
Run Code Online (Sandbox Code Playgroud)
那么在这个例子中处理这个问题的最佳方法是什么?
iam*_*ind 30
在C++ 03中,您可以将其包含enum在struct:
struct Browser
{
enum eBrowser
{
None = 0,
Chrome = 1,
Firefox = 2
};
};
Run Code Online (Sandbox Code Playgroud)
在C++ 11中,使它成为enum class:
enum class Browser
{
None = 0,
Chrome = 1,
Firefox = 2
};
Run Code Online (Sandbox Code Playgroud)
在C++ 03中namespace也可以包装,但我个人觉得包装struct/ class更好,因为namespace更广泛.例如
// file1.h
namespace X
{
enum E { OK };
}
// file2.h
namespace X
{
enum D { OK };
}
Run Code Online (Sandbox Code Playgroud)
jua*_*nza 12
一种选择是将每个枚举放在不同的命名空间中:
namespace Foo {
enum Browser {
None = 0,
Chrome = 1,
Firefox = 2
}
}
namespace Bar {
enum OS {
None = 0,
XP = 1,
Windows7 = 2
}
}
Run Code Online (Sandbox Code Playgroud)
如果编译器可用,更好的选择是使用C++ 11 枚举类:
enum class Browser { ... }
enum class OS { ... }
Run Code Online (Sandbox Code Playgroud)
有关枚举类的讨论,请参见此处.
| 归档时间: |
|
| 查看次数: |
21798 次 |
| 最近记录: |