从没有资格的类中的枚举中解析名称

时间:2015-07-03 17:15:28

标签: c++ enums using

请考虑以下事项:

class Class { public:
  enum Enum {
    FOO, BAR
  };
};

void routine(void) {
  int x = Class::Enum::FOO;  //Option 1

  int y = Class::FOO;        //Option 2

  using Alias = Class::Enum; //Option 3
  int z = Alias::FOO;

  using Class::Enum;         //Option 4 (line 15)
  int w = FOO;
}

选项1 是完全资格。

C ++还允许选项2

写入的

选项4 将失败; g ++告诉我:

15 : error: using declaration cannot refer to class member
using Class::Enum;
~~~~~~~^
15 : note: use an alias declaration instead
using Class::Enum;
^

在跟随它后的int w = FOO;行进行。

我认为g ++建议的是选项3 。不幸的是,这仍然需要一个令人讨厌的资格。

我的问题:有没有办法让int w = FOO;行通过某种方式修复它上面的行来编译?如果没有,为什么不呢?如果是,请解释。

1 个答案:

答案 0 :(得分:2)

#include <iostream>

class Class { public:
    enum Enum {
        FOO, BAR
    };
};

using namespace std;

auto main() -> int
{
    int x = Class::Enum::FOO;  //Option 1
    cout << x << endl;

    int y = Class::FOO;        //Option 2
    cout << y << endl;

    using Alias = Class::Enum; //Option 3
    int z = Alias::FOO;
    cout << z << endl;

    static constexpr auto FOO = Class::FOO;         //Option 4 (line 15)
    int w = FOO;
    cout << w << endl;

    return 0;
}