我见过人们写这样的代码......它有什么意义......
class Test
{
public:
struct MethodEnum
{
enum Enum
{
Method1,
Method2
};
};
};
在 C++11 之前的版本中, 的标签enum
没有作用域(这意味着标签可以在没有任何enum
类型限定的情况下访问!)。因此,为了使它们具有范围,程序员编写了这些代码。但在 C++11 中,不需要它,因为您可以使用enum class
.
因此,在 C++11 中,您的代码将如下所示:
class Test
{
public:
enum class MethodEnum
{
Method1,
Method2
};
};
如果在同一范围内定义了多个枚举类型,并且其中两个枚举类型具有相同名称的枚举,则会发生冲突。这种技术将名称放入单独的范围内,可能通过将名称放入单独的范围内来避免这种冲突。这样,在Test
您的成员函数中,将枚举数称为MethodEnum::Method1
等。
在 C++11 中,您可以使用enum class
.
有时,您不希望枚举器污染周围的范围;例如
enum Colour {
Red,
Yellow,
Orange
};
enum Fruit {
Apple,
Physalis,
Orange // ERROR! already defined
};
您的示例是将它们包含在范围内的老式方法;这些天来,我们对枚举 ( enum class
) 进行了限定,以便更方便地执行此操作。
它设置 MethodEnum 和枚举之间的逻辑(或语义)链接。所以例如你可以写
switch ( SomeExpression )
{
case Test::MethodEnum::Method1
// do some method1
break;
case Test::MethodEnum::Method2
/ do some method2
break;
default:
std::cout << "There is no such a method" << std::endl;
break;
}