Ответ 1
Нет, однако с небольшим переформатированием
namespace myNamespace { class myClass; }
не намного хуже, чем
class myNamespace::myClass;
Я могу переслать объявить функцию в пространстве имен, выполнив следующее:
void myNamespace::doThing();
что эквивалентно:
namespace myNamespace
{
void doThing();
}
Чтобы переслать объявление класса в пространстве имен:
namespace myNamespace
{
class myClass;
}
Есть ли более короткий способ сделать это? Я думал что-то вроде:
class myNamespace::myClass;
Нет, однако с небольшим переформатированием
namespace myNamespace { class myClass; }
не намного хуже, чем
class myNamespace::myClass;
Я хотел сделать то же самое раньше - это не разрешено. Элемент пространства имен должен быть объявлен в namespace-body
. Их можно только "упомянуть", используя оператор разрешения области.
См. 3.3.5 "Область пространства имен" в стандарте.
Сообщается, что объекты, объявленные в пространстве имен, являются членами пространства имен, а имена, введенные этими объявлениями в декларативную область пространства имен, называются именами членов пространства имен.
и
Член пространства имен также может ссылаться после того, как оператор разрешения области видимости (5.1) применяется к имени своего пространства имен или имени пространства имен, которое назначает пространство имен членов в директиве-указателе;
Я так не думаю.