从C ++调用python函数时如何将C ++类作为参数传递?

时间:2014-12-07 23:33:03

标签: python c++ swig

我正在编写一个需要加载Python模块的C ++应用程序,并调用该模块中的函数。 应用程序需要传递给python函数一个C ++ claseses作为参数。 我设法从C ++代码调用python代码,但我只设法传递" primative"作为参数的类型。

我使用SWIG创建包装器/接口,但是我没能找到如何将我的C ++类从应用程序转换为PyObject *,以便将它作为参数传递给python函数。

您知道在哪里可以找到有关如何从C ++执行转换到PyObject *的信息吗?

3 个答案:

答案 0 :(得分:0)

Boost有一个python接口库,可能对你有所帮助。

check it out

heres the documentation on functions

答案 1 :(得分:0)

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

实现:

在C ++文件中

MyClass myObject;
...
PyObject *parameterForPython = PyCObject_FromVoidPtr(&myObject, NULL); // step 1
PyTuple_SetItem(pyArgs, 0, parameterForPython);
PyObject_CallObject(pythonFunctionObject, pyArgs);

在swig接口文件中(步骤2的代码):

%inline %{
    MyClass *convertPyObjectToMyClass(PyObject * ptr) {
        return (MyClass *)PyCObject_AsVoidPtr(ptr)
    }
%}

在python模块中:

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

答案 2 :(得分:0)

您是否考虑过使用SWIG_NewPointerObj(ptr, type, flags)SWIG_ConvertPtr(obj, pptr, type, flags)

您可以通过运行:

来获得这些声明
swig -python -external-runtime swig-python.h