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);
}
パイソン:
import hello_ext
class NewFoo(hello_ext.Foo):
def Print(self):
print 'Print call'
hello_ext.ProcessFoo( NewFoo() )
すべて正常に動作し、通話Print call
からのテキストがありProcessFoo
ます。しかし、渡されたすべてのポインターを次のように保存したいProcessFoo
:
std::vector<Foo*> data;
void ProcessFoo(Foo *obj) { data.push_back(obj); obj->Print(); }
関数ポインターの終了後、無効になり、ベクターから使用できなくなります。そのポインターの寿命を長くする最良の方法は何ですか? 共有ポインタを使用するか、Python にオブジェクトを削除しないように指示します (削除する場合は?)