Как получить доступ к безымянному «enum class», инкапсулированному внутри класса? - PullRequest
5 голосов
/ 10 июня 2011
class A {
  public: enum class { HELLO, WORLD };
};

Зная, что внутри class лучше объявить простое enum (а не enum class), поскольку оно уже набрано с идентификацией class.Но все же приведенное выше утверждение является действительной C++0x подписью.Теперь, как получить доступ к неназванному enum class снаружи?

int i = A::HELLO; // error: ‘HELLO’ is not a member of ‘A’

1 Ответ

8 голосов
/ 10 июня 2011

На самом деле, это недопустимо.C ++ 0x FDIS говорит (9.2p1)

За исключением случаев, когда используется для объявления друзей (11.3) или для введения имени члена базового класса в производный класс (7.3.3), объявления членов объявляют членов класса, и каждое такое объявление членов должно объявлять по крайней мере одно имя члена класса.

В вашем случае имя перечислителя не вводится в область действия класса, и имя перечисления также не вводится.Таким образом, никакое имя члена вообще не вводится этой декларацией члена.

РЕДАКТИРОВАТЬ: И на самом деле, есть более прямой запрет декларации перечисления.7.2p2:

Необязательный идентификатор не должен быть опущен в объявлении перечисления с областью действия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...