Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Boost::Python несоответствие типов аргумента 
:(
    Опции темы
vig220
Дата 14.1.2013, 05:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 10.1.2013

Репутация: нет
Всего: нет



Всем привет!
Код можно было бы еще сократить, но я уже побоялся, может как раз суть и обрежу.
Итак, такая проблема, есть С++ код, и мои "сочинения" для boost::python:
Код

//------ Third-party, как есть => не меняем
class HelpClass 
{
     bool HelpClass::Foo( int & Param) {... ; return true} // результат выполнения функции записывается в Param
     bool HelpClass::Foo( double & Param) {... ; return true} 
}
class Base {
{
    Base();
    Base( const Base& ){};
    virtual ~Base();

    HelpClass MyVar;
...};

//------ Мое, меняем :)
class WrapBase : Base, wrapper<Base> {...} //там у меня override виртуальных функций

class DerivedHelp : HelpClass { // там много оверлоадингов, в том числе и std::string, но я для краткости 2 покажу
    int MyFoo(const int & Param)   {return Base::Foo(const_cast<int&>(Param)) ? Param : 0 ;} // теперь функция возвращает результат, вот такой вот я "хитрый", может есть поизящней способ? 
    double MyFoo(const double & Param)   {return Base::Foo(const_cast<double&>(Param)) ? Param : 0 ;}  
};

class WrapHelp : DerivedHelp, wrapper<DerivedHelp> {} //пусто,без него компилятор ругается 

//overloading 
int (WrapHelp::*MyFoo1)(const int &) = &WrapHelp::MyFoo;
int (WrapHelp::*MyFoo2)(const double &) = &WrapHelp::MyFoo;


BOOST_PYTHON_MODULE( pyApp) {
        class_<WrapBase, boost::noncopyable>("Base", init<>()) // для совместимости вызов из питона назвал также как и в С++
             ....
             .def_readonly("MyVar", &WrapBase::MyVar)
        ;
    class_<WrapHelp, boost::noncopyable>("WrapHelp", init<>())
        .def("Foo", MyFoo1)
        .def("Foo", MyFoo2)
        ;


Вот... 
Все компилируется через bjam без проблем (по крайней мере с этим кодом).
Запускаю и питон:

Код

>>> from pyApp import *
>>> py = Base() #вы же помните, что это на самом деле WrapBase ;)
>>> py.MyVar
<pyApp.WrapConfigReader object at 0xb74e66bc> # как я понимаю объект создан
>>> py.MyVar.Foo(0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
Boost.Python.ArgumentError: Python argument types in
    WrapHelp.Foo(WrapHelp, int)
did not match C++ signature:
   Foo(WrapHelp {lvalue}, int)
   Foo(WrapHelp {lvalue}, double)


2 дня сижу с этой проблемой... сил уже нет. Единственное, что нагуглил, это:
 pyApp.WrapHelp.__init__ , 
ну в общем, проиницилизировать мой объект, но он же уже создан вроде как <pyApp.WrapConfigReader object at 0xb74e66bc>

Но это во-первых не работает smile, а во-вторых мне нужно сделать правильную инициализацию на С++ стороне, поэтому и написал это в этом форуме.

Подскажите, люди добрые, век благодарен буду smile Если че-то не дописал, подскажите, разъясню поконкретней

P.S. Вот что заметил: <pyApp.WrapConfigReader object at 0xb74e66bc>  разве не должно быть что-то вроде pyApp.Base. WrapConfigReader ?  Хотя в том же классе есть другой похожий объект, который работает без вопросов...

Это сообщение отредактировал(а) vig220 - 14.1.2013, 18:55
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0657 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.