簡體   English   中英

轉發聲明可能的typedef c ++ 0x

[英]Forward declare possible typedef c++0x

從問題的答案中我可以理解, 在c ++中正向聲明一個類的公共typedef,而在c ++中正向聲明可能是typedef的東西是不可能的。

可以在C ++ 0x中執行此問題的要求嗎?

否則,進行如下更改:

class X {...};
typedef X Z;

class Y {...};
typedef Y Z;

破壞客戶端代碼。

我認為不應該這樣,因為typedef的要點是它們應該使基礎類型對客戶端透明,因此您可以在不破壞客戶端代碼的情況下更改實現。

澄清度

基本上,可以說我們可以有以下兩種選擇:

class X {...};
typedef X Z; // (1)

要么

class Z {...}; // (2)

我希望能夠在客戶端代碼中執行此操作:

class Z; // Or something of this effect, sadly this fails in the case of (1)

而且無論Z是typedef還是類(實際上對客戶端都是透明的),該代碼都無需更改。

假設標頭包含在用戶源的“標頭”中,並且它們不會轉發聲明您的類。 如果用戶想要更輕量的標題,請給他們一個。

標准庫包括一個由前向聲明<iosfwd>組成的標頭。 您可以采用或改編該約定,例如"foo_forward.h"

當用戶在任何地方為您的類編寫前向聲明時,他實際上是在為您編寫標頭。 這是站不住腳的安排。

typedef為某種類型創建另一個名稱。 當你做

typedef X Z;

您告訴編譯器“ Z是X的另一個名稱”。 如果它當時不知道X是什么,那么該信息將毫無用處。

當你說

class X;

編譯器至少知道X是用戶定義的類型,這很有幫助。 然后可以排除X不是可能需要特殊處理的類型之一,例如void*char

C ++ 0x不會改變這一點。

暫無
暫無

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

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