データを管理するためのさまざまなクラスを提供するC ++ライブラリがあります。ライブラリのソースコードがあります。
ライブラリをCコードとC ++コードで同時に使用できるように、C ++ APIを拡張してC関数呼び出しをサポートする必要があります。
私はGNUツールチェーン(gcc、glibcなど)を使用しているため、言語とアーキテクチャのサポートは問題になりません。
これが技術的に不可能である理由はありますか?
注意が必要な落とし穴はありますか?
これに関して利用可能なリソース、コード例、ドキュメントはありますか?
私が見つけた他のいくつかのこと:
- 以下を使用して、Cコードで使用する必要があるC ++ヘッダーをラップします。
#ifdef __cplusplus
extern "C" {
#endif
//
// Code goes here ...
//
#ifdef __cplusplus
} // extern "C"
#endif
- 「実際の」C ++インターフェースは、Cには含まれていない個別のヘッダーファイルに保存します。ここではPIMPLの原則を考えます。
#ifndef __cplusplus #error
ものを使用すると、狂気を検出するのに役立ちます。 - Cコードの名前としてのC ++識別子の注意
- CおよびC ++コンパイラ間でサイズが異なる列挙型。GNUツールチェーンを使用している場合はおそらく問題ではありませんが、それでも注意してください。
Cが混乱しないように、構造体については次の形式に従ってください。
typedef struct X { ... } X
次に、C ++オブジェクトを渡すためにポインターを使用します。それらは、Cでstruct Xとして宣言する必要があります。ここで、XはC ++オブジェクトです。
これらはすべて、C ++のウィザードである友人の好意によるものです。