boost :: python-将列表中对象的生存期绑定到列表的创建者

时间:2018-09-20 15:53:19

标签: c++ boost-python

假设我有一个包含子对象列表的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)
      ;
}

0 个答案:

没有答案