Статические методы создания в Boost Python

0

Я пытаюсь создать объект, используя boost python. Определение класса (псевдокод):

class Awrap : public A, public boost::python::wrapper<A> {
   static std::shared_ptr<A > Create(...) { ... } // inherited from A

   virtual double foo(...) override { // overrides pure virtual function in A
          return this->get_override("foo")(...);
   }
};

BOOST_PYTHON_MODULE() {
   using namespace boost::python
   class_<Awrap,std::shared_ptr<Awrap>, boost::noncopyable>("A",boost::python::no_init)
     .def("Create",&A::Create).staticmethod("Create")
     .def("foo",pure_virtual(&Awrap::foo));

     boost::python::register_ptr_to_python<std::shared_ptr<A> >();
}

Проблема в том, что когда я реализую дочерний элемент в python и вызываю статический метод create, он создает указатель на Awrap (а не на дочерний элемент). Таким образом, он не может найти версию python для "foo". Если я реализую foo в классе Awrap вместо дочернего элемента python, он отлично работает, но я не хочу этого делать!

Какие-либо предложения?

Благодарю!

Теги:
boost
boost-python

1 ответ

0

Вам нужно разоблачить оба параметра Awrap::foo и A::foo чтобы повысить уровень python. См. Пример в:

http://www.boost.org/doc/libs/1_54_0/libs/python/doc/tutorial/doc/html/python/exposing.html

  • 0
    Я сделал это, добавив boost :: python :: register_ptr_to_python <std :: shared_ptr <A> ();

Ещё вопросы

Сообщество Overcoder
Наверх
Меню