[英]How do I pass a instance member function as a PyCFunction type using the Python C/C++ Interface
我正在尝试将Python嵌入现有的C ++应用程序中。 但是我一直试图从python脚本调用实例成员函数。
我有一个现有的类,其中有一个私有成员函数,该私有成员函数包装了本机函数并符合PyCFunction接口。
class MY_CLASS {
public:
void MY_CLASS();
void submit(TypeA a, int b);
private:
PyObject* PythonMethod_submit(PyObject*, PyObject*);
}
当我创建PyMethodDef时,我使用方法名称来标识我想要的函数,但是我收到一个错误提示,指出我必须输入错误的类型签名。
MY_CLASS::MY_CLASS() {
// Python C/API Intilization stuff
PyMethodDef ModuleMethods[] = {
{ "submit",
PythonMethod_submit,
METH_VARARGS,
"docstring" }
};
Py_InitModule("myclass", ModuleMethods);
// Further interaction with the embeded interpreter
}
如果我按照Python C API所述使用静态函数,则此过程有效,当我使用类成员时,我收到一个错误,该错误断言PyObject* (MY_CLASS::)(PyObject*, PyObject*) does not match PyObject* (*)(PyObject*, PyObject*)
。
是否可以按照错误所述将成员函数作为函数指针传递?
否。非静态成员函数具有隐式传入的MY_CLASS *
( this
),而行为类似于C函数的静态成员函数则没有。 有关不同类型的签名,请参见此页面: http : //www.parashift.com/c++-faq/fnptr-vs-memfnptr-types.html
作为替代方案,您可以做的是在Python对象中拥有一个成员,该成员持有一个指向C ++对象的指针( MY_CLASS *
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.