cpp:
#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);
}
Python:
^{pr2}$一切正常,来自ProcessFoo
调用的Print call
文本。但我想存储所有传递到ProcessFoo
的指针,如:
std::vector<Foo*> data;
void ProcessFoo(Foo *obj) { data.push_back(obj); obj->Print(); }
退出函数后指针变得无效,我不能从向量使用它。什么是使指针的寿命变大的最佳方法?使用共享指针或告诉python不要删除对象(如果它删除了它?)在
如果要存储这个指针,就必须增加底层python对象(PyObject)的引用计数。为此,您必须实现您的空进程Foo(FoO*Objo)以获得Python对象而不是C++对象,因为否则Boosix::Python将在其适配中为Python对象剥离,并且不再控制其生存期。在
如果你这样做,你也必须做明确的转换到C++类型(但是用Booo::Python,这不是那么麻烦)。在
相关问题 更多 >
编程相关推荐