gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 06:58:24 25 4
gpt4 key购买 nike

我正在尝试将 Python 嵌入现有的 C++ 应用程序中。但是我坚持尝试从 python 脚本调用实例成员函数。

我有一个现有的类,其中有一个私有(private)成员函数,它包装了 native 函数并满足 PyCFunction 接口(interface)。

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匹配 PyObject* (*)(PyObject*, PyObject*)

是否可以按照错误中所述将成员函数作为函数指针传递?

最佳答案

没有。非静态成员函数具有隐式传入的 MY_CLASS *(如 this),而行为类似于 C 函数的静态成员函数则没有。有关不同类型的签名,请参阅此页面:http://www.parashift.com/c++-faq/fnptr-vs-memfnptr-types.html

作为替代方案,您可以在 Python 对象中添加一个成员,该成员持有指向 C++ 对象的指针 (MY_CLASS *)。

关于python - 如何使用 Python C/C++ 接口(interface)将实例成员函数作为 PyCFunction 类型传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22869709/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com