簡體   English   中英

轉發聲明一個typedef

[英]Forward-declare a typedef

我有一個很大的頭文件(〜10000行),該文件是由腳本/程序自動生成的,超出了我的控制范圍。

為了避免在類的聲明中包含此文件,我向前聲明了我需要的幾種類型:

--myclass.h

namespace bl {
   class TypeA;
   class TypeB;
}
// Other stuff and myclass definition...

現在,事實證明TypeATypeB不是類名,而是在自動生成的文件中定義為:

typedef SomeUnspecifiedClassName TypeA;
typedef AnotherUnspecifiedClassName TypeB;

SomeUnspecifiedClassName不能轉發該類型名稱,因為它可能在各種情況下發生變化。

如何轉發聲明一個typedef? (不能使用c ++ 11)

簡單-您不能。 但是,如果您發布自己的特定情況,則可能需要采取一些變通辦法。

您可以編寫一個腳本,從自動生成的源文件中的typedef行中提取...UnspecifedClassName 然后,該腳本將成為您自己的自動生成的頭文件的基礎,該頭文件將對這些類以及您的typedef語句進行轉發。 然后,您的myclass.h文件可以#include該頭文件。

我發現有時有用的一個相對不錯的解決方案是創建一個瑣碎的包裝器類:

放在頭文件中:

class ClassA;
// now use pointers and references to ClassA at will

放置在源文件中:

#include <NastyThirdPartyHeader>

class ClassA: public TypeA {
public:
  ClassA(TypeA const &x): TypeA(x) {}
  ClassA &operator=(TypeA const &x) {
    TypeA::operator=(x);
    return *this;
  }
};

根據您的用例,這可能就是您所需要的。

暫無
暫無

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

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