簡體   English   中英

我可以在C ++中“轉發聲明”什么?

[英]What can I “forward declare” in C++?

我知道我能做到

class Foo;

可能

struct Bar;

和全球職能

bool IsValid(int iVal);

鍵入的枚舉怎么樣? 在未申報的課程中輸入的枚舉怎么樣? 具有未聲明的類的函數怎么樣? 那個未申報的課程中的靜態成員怎么樣? 在未知的命名空間中這些怎么辦? 我錯過了任何可以向前宣布的東西嗎?

你可以轉發聲明

  • 模板,包括部分特化
  • 明確的專業化
  • 嵌套類(包括結構,“真實”類和聯合)
  • 非嵌套和本地類
  • 變量(“extern int a;”)
  • 功能

如果通過“前向聲明”您嚴格意味着“聲明但未定義”,您也可以轉發聲明成員函數。 但是一旦聲明它們,你就不能在它們的類定義中重新聲明它們。 您無法轉發聲明枚舉。 我不確定我是否錯過了什么。

請注意,上面列出的所有前向聲明(部分和顯式特化除外)都需要使用非限定名稱聲明,並且成員函數和嵌套類只能在其類定義中聲明但未定義。

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM