大佬教程收集整理的这篇文章主要介绍了c – 提升python对象的生命周期,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_301_8@
@H_301_8@
#include <boost/python.hpp> using namespace boost; using namespace boost::python; struct Foo { virtual ~Foo() {} virtual void Print() = 0; }; struct FooWrap : Foo,wrapper<Foo> { void Print() { this->get_override("Print")(); } }; void ProcessFoo(Foo *obj) { obj->Print(); } BOOST_PYTHON_MODULE(Hello_ext) { class_<FooWrap,boost::noncopyable>("Foo") .def("Print",pure_virtual(&Foo::Print)); def("ProcessFoo",&ProcessFoo); }@H_404_12@Python:@H_301_8@
@H_301_8@
import Hello_ext class NewFoo(Hello_ext.Foo): def Print(self): print 'Print call' Hello_ext.ProcessFoo( NewFoo() )@H_404_12@一切正常,有来自ProcessFoo调用的Print调用文本.但是我希望将所有传递的指针存储到ProcessFoo中:@H_301_8@
@H_301_8@
std::vector<Foo*> data; void ProcessFoo(Foo *obj) { data.push_BACk(obj); obj->Print(); }@H_404_12@退出函数指针后变为无效,我无法从向量中使用它.使指针的生命周期更大的最佳方法是什么?使用共享指针或告诉python不要删除对象(如果它删除它?)@H_301_8@
@H_301_8@
如果你这样做,你还必须明确地向你转换C类型(但是使用boost :: python这不是那么麻烦).@H_301_8@
@H_301_8@
using namespace boost::python; std::vector< std::pair<object,Foo&> > myVec; void ProcessFoo(object o ) { Foo& x = extract<Foo&>(o); // ... do you add to container here,but remember,to add the object o // too,otherwise the refernce counter will be decremented and the object // may go away. myVec.push_BACk( std::make_pair( o,x ) ); }@H_404_12@
以上是大佬教程为你收集整理的c – 提升python对象的生命周期全部内容,希望文章能够帮你解决c – 提升python对象的生命周期所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。