例子:
// can't forward declare with class Foo::Bar
// actual class
class Foo
{
public:
class Bar // or enum Bar
{
}
};
我承认在当前的C++标准下,这是不被允许的,但我无法找到一个不允许它的好理由,特别是在C++0x中,我们现在可以前向声明枚举。我想反对它的一个论点可能是,如果我们前向声明了嵌套类,结果该嵌套类是私有的,那么将不会被允许。但这与在命名空间中前向声明一个类,然后声明它为外部类的嵌套类没有太大区别。编译器只会给出一个错误(可能是类似于前面的声明与此声明不匹配的错误信息)。
那么为什么它真正地不被允许呢?
换句话说(由James McNellis提出),“为什么class Foo :: Bar;没有提供Foo或Bar的定义是不允许的?”
鉴于C++标准委员会通过引入C++0x中的枚举前向声明来减少依赖关系和编译时间的好处,那么这肯定是同样的事情的一部分,对吧?