Использование производного класса (C ++) от Python BOOST

У меня есть класс C ++, который я хочу использовать в Python:

#include "ExtraClass.h"class CApp
{
...
ExtraClass Bar; //there is function Foo()
}

BOOST_PYTHON_MODULE( CApp )
{
class_<ExtraClass>("ExtraClass",init<>())
.def("Foo",&ExtraClass::Foo)
;
class_<CApp>("CApp", init<>())
.def_readonly("Bar", &CApp::Bar)
;

Компиляция в порядке. Поэтому у меня есть файл CApp.so для импорта в Python.
Итак, проблема начинается с Python:

from CApp import *
class pyApp(CApp):
def __init__(self):
print "<--INIT-->"CApp = CApp()
pyApp = pyApp()
print CApp.Bar.Foo()
print pyApp.Bar.Foo()

Выход:

<--INIT-->
FOO // <- this is from CApp.Bar.Foo()
Traceback (most recent call last):
File "./pytest.py", line 16, in <module>
print pyApp.Bar.Foo()
Boost.Python.ArgumentError:
Python argument types in None.None(pyApp)
did not match C++ signature: None(CApp {lvalue})

0

Решение

Если вы реализуете в этом() в производном классе, то вам нужно обязательно вызвать базу в этом() иначе у него не будет базовых членов.

from CApp import *
class pyApp(CApp):
def __init__(self):
CApp.__init__(self)
print "<--INIT-->"CApp = CApp()
pyApp = pyApp()
print CApp.Bar.Foo()
print pyApp.Bar.Foo()

Я столкнулся с той же проблемой и нашел решение, спасибо здесь — https://stackoverflow.com/a/6396839.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector