python传递类的实例_Boost-python如何将c类实例传递给python类

我是新增的

python.我必须首先在cpp代码中初始化一个cpp类实例,然后将此cpp实例传递给python代码,使用python类实例来调用它(cpp实例).我已经尝试过

Python / C API的方式,但失败了,所以我不知道如何传递一个c类的实例到一个python类.

以下是我的代码,从boost python演示中更改.

在main.cpp

#include

#include

#include

using namespace boost::python;

using namespace std;

class World

{

private:

string name;

public:

void set(string name)

{

this->name = name;

}

void greet()

{

cout << "hello,I am " << name << endl;

}

};

typedef boost::shared_ptr< World > world_ptr;

BOOST_PYTHON_MODULE(hello)

{

class_("World")

.def("greet",&World::greet)

.def("set",&World::set)

;

register_ptr_to_python();

};

int main()

{

Py_Initialize();

PyRun_SimpleString("import sys");

PyRun_SimpleString("sys.path.append('./')");

world_ptr worldObjectPtr (new World);

worldObjectPtr->set("C++!");

try

{

inithello();

PyObject* pModule =PyImport_ImportModule("python");

PyObject* pDict = PyModule_GetDict(pModule);

PyObject* pClassHelloPython = PyDict_GetItemString(pDict,"Person");

PyObject* pInstanceHelloPython = PyInstance_New(pClassHelloPython,NULL,NULL);

PyObject_CallMethod(pInstanceHelloPython,"sayHi",NULL);

worldObjectPtr->greet();

PyObject_CallMethod(pInstanceHelloPython,"greetReset","O",worldObjectPtr);

worldObjectPtr->greet();

}

catch (error_already_set)

{

PyErr_Print();

}

Py_Finalize();

return 0;

}

在python.py

class Person:

def sayHi(self):

print 'hello from python'

def greetReset(self,instance):

instance.set('Python')

在上面的代码中,我想将worldObjectPtr传递给pInstanceHelloPython,因此,pInstanceHelloPython可以将worldObjectPtr->名称设置为Python.但我只是不知道该怎么做.谢谢你的耐心提前!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值