[英]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.