Есть ли более короткий способ переадресации объявления класса в пространстве имен?
-
21-09-2019 - |
Вопрос
Я могу переслать объявление функции в пространстве имен, выполнив следующие действия:
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), применяемый к имени его пространства имен или имени пространства имен, которое номинирует пространство имен члена в директиве using;
Я так не думаю.