在命名空间中有更短的前向声明类的方式吗?

21

我可以通过以下方式在命名空间中前向声明一个函数:

void myNamespace::doThing();

等同于:

namespace myNamespace
{
  void doThing();
}

在命名空间中前向声明一个类:

namespace myNamespace
{
  class myClass;
}

有没有更短的方法来做这件事?我想到了一些类似于这样的命令:

class myNamespace::myClass;

1
省去了我的烦恼 - 感谢您的问题! - Michael Dorgan
3个回答

29
不需要,不过稍加重新格式化即可。
namespace myNamespace { class myClass; }

并不比...糟糕太多

class myNamespace::myClass;

12

我之前也想过做同样的事情 - 但这是不被允许的。命名空间成员必须在 namespace-body 中声明。只能使用作用域解析运算符"引用"它们。

请参见标准中的3.3.5“命名空间作用域”。

  

namespace-body中声明的实体被称为命名空间的成员,由这些声明引入命名空间声明区域的名称被称为该命名空间的成员名称。

并且

  

在将::作用域解析运算符(5.1)应用于其命名空间的名称或指定该成员命名空间的名称的using指令后,还可以引用命名空间成员。


3
我不这么认为。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接