我正在尝试将 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);
但是因为它是一个模板,我真的不知道第二个参数该使用什么。即使我对“正确”的 SWIGTYPE 进行硬编码,它通常也会在 PyEval_CallObject 上出现段错误。
所以我的问题是:
调用 swig 类型包装的最佳方法是什么?
我在这里是否朝着正确的方向前进?导演看起来很有希望实现回调,但我找不到使用 python 的导演示例。
更新:正在生成正确的包装。我还有其他返回 shared_ptrs 并且可以正确调用它们的函数。