Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Boost_python переопределить переменную класса


Автор: vig220 10.1.2013, 01:04
Всем привет!
Есть 2 класса (3rd party, нельзя менять) для экспорта в Питон через Boost:
Код

class Extra {...};
class Base {     
      ....
      Extra cVar;
};

Сделал обёрточки для boost::python:
Код

struct WrapBase : Base, wrapper<Base> // для overloading  и т.д.
{ .... };

BOOST_PYTHON_MODULE( pyApp )
{
        class_<WrapBase, boost::noncopyable>("Base", init<>()) 
             .def_readonly("cVar", &WrapBase::cVar)
}

Компиляция ок. В Питоне все методы класса Extra работают без вопросов. 
Но как только появилась необходимость сделать такой же wrap класс для Extra, появились проблемы:
Код

struct WrapExtra : Extra, wrapper<Extra> 
{ .... 
   void Test (){,,,} // добавленный метод для теста 
};
struct WrapBase : Base, wrapper<Base>
{ ....
      WrapExtra pyVar;  // переменная на новый класс (с добавленным методом Test)
 };

BOOST_PYTHON_MODULE( pyApp )
{
        class_<WrapBase, boost::noncopyable>("Base", init<>()) 
             .def_readonly("cVar", &WrapBase::pyVar) // ссылка на новую переменную,  для совместимости вызов обозвал также как и оригинал
}


И получил ошибку компилятора в строке 13 предыдущего кода (.def_readonly("cVar", &WrapBase::pyVar)):
error: cannot convert ‘WrapExtra WrapBase::*’ to ‘WrapExtra Base::*’ in initialization

Может, кто поможет? Заранее благодарен.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)