41

私は現在プロジェクトに取り組んでおり、プログラムをスクリプト化できるようにするには、C++クラスをPythonでラップする必要がありました。したがって、私の特定の経験には、Pythonインタープリターをプログラムに埋め込むことも含まれていました。

私が試した代替案は次のとおりです。

  • Boost.Python

    Boost.Pythonによって生成されたよりクリーンなAPIが好きでしたが、ユーザーが追加の依存関係をインストールする必要があるという事実により、SWIGに切り替えました。

  • SWIG

    SWIGの主な利点は、最終的なプログラムを使用するためにエンドユーザーがSWIGをインストールする必要がないことです。

あなたはこれを行うために何を使用しましたか、そしてそれであなたの経験は何でしたか?

4

5 に答える 5

23

私は両方を使用しました (同じプロジェクトで): Boost は、STL、特に C++ 例外とよりよく統合されています。また、そのメモリ管理メカニズム (C++ メモリ管理と Python GC の橋渡しを試みる) は、SWIG よりもはるかに柔軟です。ただし、SWIG にははるかに優れたドキュメントがあり、外部依存関係はありません。Python 用の SWIG でラップされたライブラリを取得すると、Java/Perl/Ruby ラッパーも同様に取得できるようになります。

明確な選択肢があるとは思いません。小規模なプロジェクトの場合は、Boost.Python を使用します。大規模で長期にわたるプロジェクトの場合は、SWIG への追加投資はそれだけの価値があります。

于 2008-11-10T07:41:53.237 に答える
18

編集-ロビンプロジェクトは悲しいことに放棄されており、今日はあまり使用されません

私はロビンを使って大成功を収めました。

C ++タイプとの優れた統合により、コンパイルして共有オブジェクトに含める単一の.cppファイルを作成します。

于 2008-11-13T23:03:19.487 に答える
7

SIPをお勧めします。次の理由により、SIP は SWIG より優れています。

  1. 特定のファイル セットに対して、swig は SIP よりも多くの重複 (オーバーヘッド) コードを生成します。SIP は、静的または動的にリンクできるライブラリ ファイルを使用して、重複 (オーバーヘッド) の少ないコードを生成します。つまり、SIP の方がスケーラビリティに優れています。

  2. SIP の実行時間は、SWIG の実行時間よりもはるかに短いです。Python Wrapper Tools: A Performance Studyを参照してください。残念ながら、リンクが壊れているようです。リクエストに応じて共有できる個人用のコピーがあります。

于 2008-11-13T14:45:33.437 に答える
5

パイレックスまたはcythonも、2つの世界を混合するための優れた簡単な方法です。

これらのツールを使用してC++をラップすることは、Cをラップすることよりも少し注意が必要ですが、それは可能です。これはそれについてのwikiページです。

于 2008-11-10T07:42:23.393 に答える
2

Boost::Python の大きな利点は、ipython シェルでタブ補完ができることです。Boost によって直接公開された C++ クラスをインポートするか、それをサブクラス化すると、それ以降は純粋な Python クラスのように動作します。

欠点: Boost をインストールして使用するのに非常に時間がかかるため、タブ補完の時間節約のすべてを償却することはできません ;-(

したがって、私は Swig を好みます。追加機能はありませんが、簡単な紹介例の後は確実に動作します。

于 2009-05-11T11:27:15.507 に答える