データを管理するためのさまざまなクラスを提供する C++ ライブラリがあります。ライブラリのソースコードがあります。
ライブラリを C コードと C++ コードで同時に使用できるように、C 関数呼び出しをサポートするように C++ API を拡張したいと考えています。
私は 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 では、X が C++ オブジェクトである struct X として宣言するだけです。
これはすべて、C++ の達人である友人の厚意によるものです。