Не могу комментировать @jkp, но его намек помог мне.Мой минималистичный случай:
RenderWorld.h
class RenderWorld {
public:
...
void addEntity(RenderEntity* entity) {entities.push_back(entity);};
std::vector<RenderEntity*> getEntities(void) {return entities;};
private:
std::vector<RenderEntity*> entities;
};
RenderEntity.h
class RenderEntity {
public:
int getID(void) {return 42;};
};
python-exportage.py.h (компилируется в exported.pyd)
BOOST_PYTHON_MODULE(exported)
{
class_<RenderWorld>("RenderWorld")
.def("addEntity", &RenderWorld::addEntity)
.def("getEntities", &RenderWorld::getEntities)
;
class_<RenderEntity, RenderEntity*>("RenderEntity")
.def("getID", &RenderEntity::getID)
;
class_<std::vector<RenderEntity*> >("PyVec")
.def(boost::python::vector_indexing_suite<std::vector<RenderEntity*> >())
;
}
мой сеанс Python:
>>> import exported
>>> world = exported.RenderWorld()
>>> world
<exported.RenderWorld object at 0x00000000024A0E58>
>>> e1 = exported.RenderEntity()
>>> e1
<exported.RenderEntity object at 0x000000000284DF48>
>>> e1.getID()
42
>>> world.addEntity(e1)
>>> world.getEntities()
<exported.PyVec object at 0x000000000234B1B0>
>>> world.getEntities()[0]
<exported.RenderEntity object at 0x0000000002441F50>
>>> world.getEntities()[0].getID()
42
>>> e1 == world.getEntities()[0]
False
Примечание: RenderEntity*
будет заключен в другойобъект.Посмотрите на эти адреса и последнюю проверку.Это логично с точки зрения c ++, но не в области python.
c ++