如何调用C++类作为参数,从C++调用Python函数? 我正在编写一个C++应用程序,需要加载Python模块,并调用该模块中的函数。 应用程序需要传递给Python函数,C++作为参数。 我成功地从C++代码中调用了Python代码,但我只能将派生类型作为参数传递。

如何调用C++类作为参数,从C++调用Python函数? 我正在编写一个C++应用程序,需要加载Python模块,并调用该模块中的函数。 应用程序需要传递给Python函数,C++作为参数。 我成功地从C++代码中调用了Python代码,但我只能将派生类型作为参数传递。,python,c++,swig,Python,C++,Swig,我使用SWIG创建包装/接口,但未能找到如何将C++类从应用程序转换为pyObjt,以便将其作为参数传递给Python函数。 你知道在哪里可以找到如何从C++到PyObjult**的信息吗?< /P> BPost有一个Python接口库,可能对你有帮助。 我仍然没有解决方案,我只有以下解决方法: 1.我从实例创建了一个PyObject,并将其传递给python函数。 2.python代码使用SWIG生成的库中的函数将PyObject转换为类的python版本 实施: C++文件 < P> MyC

我使用SWIG创建包装/接口,但未能找到如何将C++类从应用程序转换为pyObjt,以便将其作为参数传递给Python函数。


你知道在哪里可以找到如何从C++到PyObjult**的信息吗?< /P> BPost有一个Python接口库,可能对你有帮助。


我仍然没有解决方案,我只有以下解决方法: 1.我从实例创建了一个PyObject,并将其传递给python函数。 2.python代码使用SWIG生成的库中的函数将PyObject转换为类的python版本

实施:

C++文件

< P>
MyClass myObject;
...
PyObject *parameterForPython = PyCObject_FromVoidPtr(&myObject, NULL); // step 1
PyTuple_SetItem(pyArgs, 0, parameterForPython);
PyObject_CallObject(pythonFunctionObject, pyArgs);
步骤2的swig接口文件代码:

%inline %{
    MyClass *convertPyObjectToMyClass(PyObject * ptr) {
        return (MyClass *)PyCObject_AsVoidPtr(ptr)
    }
%}
在python模块中:

def myPythonFunction(ptr):
    myObject = cppmodule.convertPyObjectToMyClass(ptr) #step 2

您是否考虑过使用SWIG_NewPointerObjptr、type、flags或SWIG_ConvertPtrobj、pptr、type、flags

您可以通过运行以下命令获得这些声明:

swig -python -external-runtime swig-python.h