Python 用の C++ アプリからいくつかのバインディングを作成しました。
問題は、メンバーへのポインターを使用することです (最短パスを計算し、パラメーターとして最小化するプロパティを与えるためです)。
これは C++ の署名です。
std::vector<Path> martins(int start, int dest, MultimodalGraph & g, float Edge::*)
これは私がやったことです(私がドキュメントで理解したことから):
%constant float Edge::* distance = &Edge::distance;
これは、Python から関数を呼び出す方法です。
foo.martins(0, 1000, g, foo.distance)
そして、これは私が得るエラーです:
NotImplementedError: Wrong number of arguments for overloaded function 'martins'.
Possible C/C++ prototypes are:
martins(int,int,MultimodalGraph &,float Edge::*)
デフォルトの 4 番目のパラメーターを使用するオーバーロードされたメソッドがあり、完全に機能します。
swigでメンバーへのポインタを使用することは可能ですか? はいの場合、トリックは何ですか?いいえの場合、最もエレガントな方法は何ですか?
ご協力ありがとうございました!
更新: Boost::python が確実にそれを行うかどうかを誰かが知っていれば、それに切り替えます。