我想所示爲Python回調添加到C++庫:Python的回調與SWIG包裹型
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);
}
失敗的原因是數據沒有經過痛飲走了,是不是的PyObject。
我試着使用:
swigData = SWIG_NewPointerObj((void*)data, NULL, 0);
但由於其模板,我真的不知道有什麼用第二個參數。即使我對「正確的」SWIGTYPE進行了硬編碼,它通常會在PyEval_CallObject上進行段錯誤。
所以我的問題是:
請告訴我援引痛飲 型包裝的最佳方式?
我是否在正確的 方向?董事看起來 承諾實施 回調,但我找不到一個 董事與Python的例子。
更新:是如何產生正確的包裝。我有其他函數返回shared_ptrs,並可以正確調用這些函數。
感謝您的更新,但我想我很困惑。爲什麼不把你的shared_ptr數據傳遞給你的Python函數?爲什麼要有一個doCallback()呢? –
我的庫封裝了現有的C++庫。 doCallback()只是底層庫不時調用的處理函數。要清楚:我從來沒有從python調用doCallback()。 – rogueg
啊,當然!我添加了一個新的答案,可以更好地爲您服務。 –