【发布时间】:2013-12-09 19:16:33
【问题描述】:
我正在使用 Boost.Python 在另一个类中公开一组对象:
class Thing {
int i; // and of course other stuff
};
class Container {
Thing *things[128];
int n_things;
}
我想为 python 提供一个只读的列表接口。我的 boost.python 扩展源代码中有这样的东西:
static bp::list EXTget_things(Container &c)
{
bp::list thing_list;
for (int i = 0; i < c.n_things; i++) {
thing_list.append(c.things[i]);
}
return thing_list;
}
我也有(不寻常的?)约束,我不能复制 Thing 对象。他们没有有效的副本构造函数,我无法真正改变它。我想只返回一个包含原始对象地址的python列表,并相应地确保python在释放列表时不会释放原始对象。
我该怎么做? (或者可以做到吗?)我认识到如果 Container 超出 python 的范围,它可能会导致生命周期问题,但是其他一些 python 代码仍然尝试使用 param_list(因为它有指向 Collection 对象的指针),但我我愿意接受这个限制。
【问题讨论】:
标签: c++ python boost boost-python