私はC++とCの結合されたAPIであると思われるもののためのヘッダーファイルを持っています。 Cの部分はextern "C"
にラップされていますが、宣言自体はCとは大きく異なります。たとえば:C APIへのC++参照のラップ
foo::Bar& Foo_Baz_GetBarOfQux(void *_self, const foo::Qux &qux);
実際にプレーンCを使用する方法はありますか。私は明らかに、このヘッダを使用することはできませんが、多分私は何とかそれを再宣言することができます
/* type? */ Foo_Baz_GetBarOfQux(void*, const /* type? */);
は何を私に困惑して(それが可能だ場合)これらの参考文献の種類を宣言する方法です。
P.S.私はこの上に自分自身のCラッパーを書くことができます知っている:私は不透明な構造体としてのクラスを宣言します。その後、
typedef struct foo_bar foo_bar_t;
typedef struct foo_baz foo_baz_t;
typedef struct foo_qux foo_qux_t;
と上記の関数をラップC-のような関数を書く:
extern "C"
foo_bar_t*
foo_baz_get_bar_of_qux(
foo_baz_t* baz,
foo_qux_t* qux)
{
return (foo_bar_t*) Foo_Baz_GetBarOfQux(baz, *(foo::Qux*)qux);
}
しかし、元のFoo_Baz_GetBarOfQux()
を直接使用できるかどうかは疑問です。
AFAIKあなたはCでスコープ解決演算子 '::'を持っていないし、 'Bar&'のような参照を返すこともできないので、この関数をplain Cのように使うことはできない。 –
@ another.anon.cowardそうだが、それ? (質問を更新しました。) –
私は、foo :: Barとfoo :: Quxと同じメモリレイアウトを持つCの型(structs?)を定義すると可能でしょう。 – Alex