図のように、PythonコールバックをC++ライブラリに追加しようとしています。
template<typename T> void doCallback(shared_ptr<T> data) {
PyObject* pyfunc; //I have this already
PyObject* args = Py_BuildValue("(O)", data);
PyEval_CallObject(pyfunc,args);
}
データがswigを通過しておらず、PyObjectではないため、これは失敗します。
私は使ってみました:
swigData = SWIG_NewPointerObj((void*)data, NULL, 0);
ただし、テンプレートであるため、2番目のパラメーターに何を使用すればよいかわかりません。'正しい'SWIGTYPEをハードコーディングしても、通常はPyEval_CallObjectでsegfaultが発生します。
だから私の質問は:
スウィッグタイプのラッピングを呼び出すための最良の方法は何ですか?
私もここで正しい方向に進んでいますか?ディレクターはコールバックを実装することを約束しているように見えましたが、Pythonを使用したディレクターの例は見つかりませんでした。
更新:適切なラッピングが生成されています。shared_ptrsを返し、それらを正しく呼び出すことができる他の関数があります。