boost :: python - привязывает время жизни объектов в списке к создателю списка - PullRequest
0 голосов
/ 20 сентября 2018

Предположим, у меня есть объект C ++, который содержит список подобъектов.Время жизни этих объектов зависит от времени жизни исходного объекта.Мне нужен метод или свойство исходного объекта, которое возвращает boost::python::list подобъектов путем создания экземпляра boost::python::list и добавления их в список по одному.Как я могу добавить эти объекты в список, сохраняя при этом политику, согласно которой элементы списка зависят от времени жизни исходного объекта?

Вот некоторый фиктивный код, объясняющий, что я пытаюсь сделать:

#include <boost/python.hpp>

namespace bp = boost::python;

struct SubObject {
};

struct MainObject {
  std::vector<SubObject *> subobjects;
};

bp::list subobjects_from_mainobject(MainObject const & obj) 
{
  bp::list retval;
  for (auto subob : obj.subobjects) {
    retval.append(subob);       // Lifetime of subob depends on lifetime of obj
  }
}


BOOST_PYTHON_MODULE(test)
{
    using namespace boost::python;

    class_<SubObject, bases<>, SubObject *>("SubObject", no_init)
      ;

    class_<MainObject>("MainObject", no_init)
      .def("subobjects", subobjects_from_mainobject)
      ;
}
...