在类内部的struct中定义enum

时间:2013-11-07 19:06:04

标签: c++ class struct enums

我见过有人写这样的代码......最重要的是......

class Test 
{
public:

    struct MethodEnum
    {
        enum Enum
        {
             Method1,
             Method2
        };
    };
};

4 个答案:

答案 0 :(得分:4)

在pre-C ++ 11中,enum的标签不是作用域的(这意味着标签可以在没有enum类型的任何限定的情况下访问!)。因此,为了使它们作用域,程序员编写了这些代码。但是在C ++ 11中,不需要它,因为你可以使用enum class来定义scoped-enum。

所以在C ++ 11中,你的代码看起来像这样:

class Test 
{
public:
    enum class MethodEnum
    {
             Method1,
             Method2
    };
};

答案 1 :(得分:1)

如果在同一作用域中定义了多个枚举类型,并且其中两个枚举类型具有相同名称的枚举,则会发生冲突。此技术将名称放在单独的范围中,可以通过将名称放在单独的范围内来避免这种冲突。这样,在Test的成员函数中,您将枚举器称为MethodEnum::Method1等。

在C ++ 11中,您可以使用enum class获取范围名称。

答案 2 :(得分:1)

有时,您不希望调查员污染周围的范围;例如

enum Colour {
    Red,
    Yellow,
    Orange
};

enum Fruit {
    Apple,
    Physalis,
    Orange    // ERROR! already defined
};

你的例子是将它们封闭在范围内的老式方法;最近,我们使用了枚举(enum class)来更方便地完成这项工作。

答案 3 :(得分:0)

它设置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;
}
相关问题