3

SWIGを使用してオクターブのC++APIをラップする最良の方法は何ですか?

必要なのは、別の言語(私の場合はDですが、問題ではありません)のラッパーを生成するために使用できるインターフェイスファイル(wrap_octave.iなど)だけです。

インターフェイスファイルに明示的に書き込むことで個々の関数をラップすることができますが、これは面倒です。インターフェイスファイルにヘッダーファイルを%インクルードすると、コンパイラエラーを生成せずにどのヘッダーファイルをインクルードするかが明確になりません。注:ラッパーのターゲット言語はオクターブではありません。代わりに、C++APIを介して別の言語で埋め込まれたオクターブを使用したいと思います。

4

1 に答える 1

1

あなたが何を望んでいるのか正確にはわかりませんが、SWIG は「サポートされていないものをラップしない」などの簡単なショートカットを提供していません。%include を再帰的に行うわけではありません。これは一般に、不要なものをラップするのを避けるのに適していますが、%include の順序を手動で管理する必要があることを意味します。依存関係を間違った順序で提供すると、SWIG はエラーや警告メッセージを出さずに間違ったコードを生成することがあります。

私のライブラリでは、ヘッダー ファイルを制御できるので、不要なものを簡単に除外できます。

#ifdef SWIG
#define INTERNAL protected
#else
#define INTERNAL public
#endif

class Foo {
public:
    void Bar();
INTERNAL: // hide from SWIG
    void Baz();
};

したがって、1 つのオプションは、ヘッダーを複製して SWIG に適したものになるまで変更するか、ラップしたくないものをすべて取り除くことです。多くの場合、変更されていないヘッダーを%include し、不要なクラスと関数を%無視することもできます。

いくつかのデータ型に特別な処理が必要な場合は、typemap で手を汚すことを期待してください。

于 2012-06-09T20:20:42.437 に答える