【问题标题】:Is there a shorter way to forward declare a class in a namespace?有没有更短的方法来转发在命名空间中声明一个类?
【发布时间】:2010-11-25 00:21:22
【问题描述】:
我可以通过这样做在命名空间中转发声明一个函数:
void myNamespace::doThing();
相当于:
namespace myNamespace
{
void doThing();
}
在命名空间中转发声明一个类:
namespace myNamespace
{
class myClass;
}
有没有更短的方法来做到这一点?我的想法是这样的:
class myNamespace::myClass;
【问题讨论】:
标签:
c++
namespaces
forward-declaration
【解决方案2】:
我以前也想做同样的事情——这是不允许的。命名空间成员必须在 namespace-body 中声明。它们只能使用范围解析运算符“引用”。
请参阅标准中的 3.3.5 “命名空间范围”。
在命名空间主体中声明的实体被称为命名空间的成员,由这些声明引入命名空间的声明区域的名称被称为命名空间的成员名称。
和
命名空间成员也可以在将 :: 范围解析运算符 (5.1) 应用于其命名空间名称或在 using 指令中指定成员命名空间的命名空间名称之后引用;
【解决方案3】:
不,但是需要重新格式化
namespace myNamespace { class myClass; }
并不比
差多少
class myNamespace::myClass;