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

时间:2009-09-02 16:08:43

标签: c++ namespaces forward-declaration

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

void myNamespace::doThing();

相当于:

namespace myNamespace
{
  void doThing();
}

转发声明命名空间中的类:

namespace myNamespace
{
  class myClass;
}

有更短的方法吗?我正在思考以下几点:

class myNamespace::myClass;

3 个答案:

答案 0 :(得分:28)

不,但稍微重新格式化

namespace myNamespace { class myClass; }

并不比

差多少
class myNamespace::myClass;

答案 1 :(得分:11)

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

参见标准中的3.3.5“命名空间范围”。

  

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

  

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

答案 2 :(得分:3)

我不这么认为。