我知道我能做到
class Foo;
可能
struct Bar;
和全局函数
bool IsValid(int iVal);
键入的枚举怎么样?在未申报的课程中输入的枚举怎么样?具有未声明的类的函数怎么样?那个未申报的课程中的静态成员怎么样?在未知的命名空间中这些怎么办?我错过了其他任何可以向前宣布的内容吗?
答案 0 :(得分:12)
您可以转发声明
如果通过“前向声明”您严格意味着“声明但未定义”,您也可以转发声明成员函数。但是一旦声明它们,你就不能在它们的类定义中重新声明它们。您无法转发声明枚举。我不确定我是否错过了什么。
请注意,除了部分和显式特化之外,上面列出的所有前向声明都需要使用非限定名称声明,并且成员函数和嵌套类只能在其类定义中声明但未定义。
class A { };
class A::B; // not legal
namespace A { }
void A::f(); // not legal
namespace A { void f(); } // legal
class B { class C; }; // legal
class B::C; // declaration-only not legal
class D { template<typename T> class E; };
template<typename T> class D::E<T*>; // legal (c.f. 14.5.4/6)