4

制御できないスクリプト/プログラムによって自動生成された大きなヘッダー ファイル (~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は使えません)

4

3 に答える 3

4

自動生成されたソース ファイル...UnspecifedClassNameの行からを抽出するスクリプトを作成できます。typedef次に、このスクリプトは、それらのクラスとtypedefそれらへのステートメントを宣言する独自の自動生成ヘッダー ファイルの基礎になります。あなたのmyclass.hファイルは、#includeそのヘッダーファイルにすることができます。

于 2013-04-29T20:33:05.760 に答える
1

私がときどき役立つと思った比較的適切な解決策の 1 つは、簡単なラッパー クラスを作成することです。

ヘッダー ファイルに配置します。

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;
  }
};

ユースケースによっては、それで十分な場合があります。

于 2014-07-20T09:33:23.377 に答える