Есть ли более короткий способ переадресации объявления класса в пространстве имен?

Я могу предварительно объявить функцию в пространстве имен, выполнив следующие действия:

void myNamespace::doThing();

что эквивалентно:

namespace myNamespace
{
  void doThing();
}

Чтобы объявить класс в пространстве имен:

namespace myNamespace
{
  class myClass;
}

Есть ли более короткий способ сделать это? Я думал что-то вроде:

class myNamespace::myClass;

person Kieveli    schedule 02.09.2009    source источник
comment
Спас меня от головной боли - спасибо за вопрос!   -  person Michael Dorgan    schedule 13.12.2011


Ответы (3)


Нет, однако с небольшим переформатированием

namespace myNamespace { class myClass; }

не намного хуже, чем

class myNamespace::myClass;
person morechilli    schedule 02.09.2009

Я хотел сделать то же самое раньше - это не разрешено. Член пространства имен должен быть объявлен в файле namespace-body. На них можно ссылаться только с помощью оператора разрешения области видимости.

См. 3.3.5 «Область пространства имен» в стандарте.

Сущности, объявленные в теле пространства имен, называются членами пространства имен, а имена, введенные этими объявлениями в декларативную область пространства имен, называются именами членов пространства имен.

и

На член пространства имен также можно ссылаться после оператора разрешения области :: (5.1), примененного к имени его пространства имен или имени пространства имен, которое назначает пространство имен члена в директиве использования;

person Michael Burr    schedule 02.09.2009

Я так не думаю.

person Tobias    schedule 02.09.2009