3

Pythonとインターフェイスできるようにする必要があるC++ライブラリがあります。私はこの質問を読んで、適応する必要のある選択を理解しました。

私はSWIGとCythonを見て、主にPythonプログラミングの経験が非常に少ないためにSWIGを使いたいと思いました。ただし、Swigを使用する場合は、クラスごとにインターフェイス(.i拡張子)を作成する必要があることに気付きました。現在、私のC ++プロジェクトは巨大であり、ラッパーを配置するのにかなりの時間がかかると感じています(または間違っているかもしれません)。

ですから、今のところ私のアプリケーションは大きいので、選択する必要があります。引用されたスレッドで、私はBoostPythonに出くわしました。今では、どちらか一方の長所と短所を教えてくれる人からの意見を決定したり、求めたりすることはできなくなりました。私の好みは使いやすさとそれがどれだけ速くできるかということに注意してください。このために、システムのパフォーマンスを妥協するつもりです。誰かが私にSWIG実装プロジェクトまたはBoostPython実装プロジェクトリンクを提供してくれれば非常にありがたいです(サンプルチュートリアルの代わりに完全なモジュールの方がはるかに良いでしょう!)

4

1 に答える 1

4

Boost::python は、C++ と Python の間のほぼラッパーのないインターフェイスを提供します。また、カスタム コンバーターや、Python インターフェイスをより良くするその他の優れたものを作成することもできます。インターフェイスは純粋な C++ ですが、テンプレートと巧妙なデザイン パターンに依存して、見栄えがよく宣言型になっています。また、コネクタ コードがコンパイラによって直接チェックされるという利点も得られます。

Swig では、Swig 独自の DSL でインターフェイス宣言を記述します。これは、コツをつかむのに数日かかります。さらに、常にラッパーレイヤーを挿入するため、少し遅くなる可能性があります。ただし、余分なものを宣言することなく、多くのものを自動的に変換するという優れた機能があります。ただし、生成されるラッパーはデバッグが非常に困難です。

IMHO boost::python は、CPython のネイティブ C インターフェイスをかなり直接操作しているため、より良い選択です。私は Java と C++ の対話に Swig を使用しています。JNI はくまなので、Python の C インターフェイスは実際にはそれだけで十分に使用できます。

すでにたくさんの Swig ラッパーをお持ちの場合は、すべての作業をやり直す必要があるため、それらを保持します。ただし、新しいプロジェクトを開始する場合、または最大のパフォーマンスが必要な場合は、boost::python を最後まで使用してください。

于 2012-12-20T04:26:06.183 に答える