繁体   English   中英

如何使用Python C / C ++接口将实例成员函数作为PyCFunction类型传递

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM