Извлечь указатель базового класса - PullRequest
0 голосов
/ 10 апреля 2011

Мне сказали, что я могу извлечь ссылку на базовый класс из любого boost::python::object.

Простой код выглядит так:

// c++:
class Base {};

// Export Base into python module

// python:
class Der(Base):
   pass

//c++:
boost::python::object obj; // It points to some Der class object made from python
boost::shared_ptr<Object> temp = extract< boost::shared_ptr<Object> >(obj);

Последняя строка завершается с:

TypeError: Зарегистрированный конвертер не был в состоянии получить значение C ++ типа Boost :: shared_ptr из этого Объект Python типа Der

Можно ли извлечь указатель для Base класса?

1 Ответ

2 голосов
/ 10 апреля 2011

Итак, используя эту ветку , я решил свой вопрос. Прежде всего, мой класс Base был экспортирован в python следующим образом:

bp::class_<Base, boost::noncopyable>("Base", bp::no_init)

Мне пришлось удалить bp::no_init. Зачем? Посмотрите на следующее обновление (ответ в посте stackoverflow, который я дал раньше):

class Der(Base):
    def __init__(self):
        super(Der, self).__init__() # Add this!

Вот и все (:

...