是否有更短的方法来转发声明命名空间中的类?

Kie*_*eli 20 c++ namespaces forward-declaration

我可以通过这样做来转发在命名空间中声明一个函数:

void myNamespace::doThing();
Run Code Online (Sandbox Code Playgroud)

这相当于:

namespace myNamespace
{
  void doThing();
}
Run Code Online (Sandbox Code Playgroud)

要在名称空间中转发声明类:

namespace myNamespace
{
  class myClass;
}
Run Code Online (Sandbox Code Playgroud)

有没有更短的方法来做到这一点?我正在思考以下问题:

class myNamespace::myClass;
Run Code Online (Sandbox Code Playgroud)

mor*_*lli 28

不,但有一点重新格式化

namespace myNamespace { class myClass; }
Run Code Online (Sandbox Code Playgroud)

并没有比这更糟糕

class myNamespace::myClass;
Run Code Online (Sandbox Code Playgroud)


Mic*_*urr 11

我之前想做同样的事情 - 这是不允许的.必须在a中声明命名空间成员namespace-body.它们只能使用范围解析运算符"引用".

请参阅标准中的3.3.5"命名空间范围".

在namespace-body中声明的实体被称为命名空间的成员,并且这些声明引入命名空间的声明性区域的名称被称为命名空间的成员名称.

在将:: scope解析运算符(5.1)应用于其名称空间的名称或命名空间的名称之后,也可以引用名称空间成员,该名称空间在using-directive中指定成员的名称空间.