次のような宣言を持つサードパーティのライブラリを使用しています。
typedef struct {} __INTERNAL_DATA, *HandleType;
そして、コンストラクターでHandleTypeを取るクラスを作成したいと思います。
class Foo
{
Foo(HandleType h);
}
HandleTypeを定義するヘッダーを含めずに。通常、そのような型を前方宣言するだけですが、この構文がわかりません。私は本当に次のようなことを言いたいです:
struct *HandleType;
しかし、それはGCCで「*の前に識別子が必要です」と言っています。私が見ることができる唯一の解決策は、次のようにクラスを書くことです:
struct __INTERNAL_DATA;
class Foo
{
Foo(__INTERNAL_DATA *h);
}
ただし、これはライブラリの内部の詳細に依存しています。つまり、実装の詳細である __INTERNAL_DATA という名前を使用します。
__INTERNAL_DATA (ライブラリの実装の一部) を使用せずに、HandleType (パブリック API の一部) を前方宣言できるように思われます。
編集:私が探しているものについての詳細を追加しました。