2012-05-08 3 views
1

私はC++でコードを書いています。基本的なデータ型やBigIntのようなものはほとんどサポートしなくてはなりません。このタイプは外部(ヘッダファイルを介して)に公開されます。これにはcプログラムも含まれます。
構造体やクラスとしてBigIntのようなデータ型を実装する必要がありますか?
混乱があるのは、
です。1.クラスとして実装すると、オブジェクト指向のメリットとして、すべての処理をクラスで実行できます。しかし、私はCプログラムのいくつかの回避策を実装しなければならないかもしれません。
2.私がstructとして実装すると、私はcプログラムのために何もする必要はありませんが、モジュール性と実装が簡単です。cでのC++オブジェクトの使用

答えて

4

基本的にCはstruct/classのどちらのC++オブジェクトにもアクセスできませんでした(C++では同じですが、デフォルトの可視性指定子でのみ異なります)。 C++オブジェクトの手続きラッパー(作成、メソッド呼び出し、破壊など)を作成する必要があります。

作成するには、不透明なポインタを返す関数を作成します(C++ではこれがオブジェクトポインタになります)。メソッド呼び出しの場合、(通常は最初の)パラメータの1つとして返されたポインタ(上記の作成関数から)を追加します。破壊の場合、メソッド呼び出しと同じですが、通常、上記のポインタ以外の他のパラメータは受け取りません。

0

C言語で使う予定の場合は、C言語で記述することをお勧めします。もう1つの選択肢は、C言語で記述し、OOインタフェースを提供するC++ラッパーを提供することです。

+0

私のライブラリはすでにC++で書かれています。私はデータ型のようなBigIntをサポートするように拡張しています。主な使用法はC++のために使用されますが、ほとんどの場合、それはcである可能性があります。 – Rahul

+2

さて、CでC++オブジェクトを使う方法はありますが、CにはC++の意味でのオブジェクトの概念がないため、すばやく*非常に*になります。基本的には、クラスがCからリンクできないため、すべてのメソッドのラッパー関数を作成する必要があります。 – Corbin

+0

関連:http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html #faq-32.9 – Corbin

関連する問題