Python到C:从Deriv,到Base,再到Deriv
发布时间:2020-12-20 13:24:11 所属栏目:Python 来源:网络整理
导读:我正在使用Boost. Python将我的C代码暴露给Python.我遇到了一个与一个对象多次从一种语言传递到另一种语言有关的困难.这就是我想要做的事情: C代码 class Base{ public: void baseTest() { std::cout "Base::basetest()"; }};class Deriv : public Base{ pu
我正在使用Boost.
Python将我的C代码暴露给Python.我遇到了一个与一个对象多次从一种语言传递到另一种语言有关的困难.这就是我想要做的事情:
C代码 class Base { public: void baseTest() { std::cout << "Base::basetest()"; } }; class Deriv : public Base { public: void derivTest() { std::cout << "Deriv::derivTest()"; } }; void call(Base& b,boost::python::object func) { func(b); } BOOST_PYTHON_MODULE(event) { using namespace boost; using namespace boost::python; class_<Base>("Base") .def("baseTest",&Base::baseTest) ; class_<Deriv,bases<Base>>("Deriv") .def("derivTest",&Deriv::derivTest) ; def("call",call); } Python代码 from event import * def callback(deriv): deriv.baseTest() # works fine deriv.derivTest() # crash! def run(): d = Deriv() call(d,callback) 我想要发生什么 > C:调用Python中定义的run()函数. (没问题) 如何使回调不崩溃? 解决方法
感谢您的评论,我找到了解决方案.它实际上非常简单,您只需将Base对象包装在shared_ptr中,而不是通过引用传递它,如下所示:
void call(boost::shared_ptr<Base> b,boost::python::object func) { func(b); } 但要小心一些事情.我试图使用Visual C 2010 Express附带的std :: shared_ptr(‘内存’标题),它导致崩溃.我必须使用boost :: shared_ptr才能工作. (我正在使用Boost版本1.46.1.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |