C++ : Embeded Python (трабла с наследованием)

Модератор: Модераторы разделов

Ответить
Аватара пользователя
oav
Бывший модератор
Сообщения: 296

C++ : Embeded Python

Сообщение oav »

Вообщем такая проблема возникла при внедрении питона в существуещее С++ приложение- незнаю как решить :(

Класс С++:

Код: Выделить всё

namespace ScriptSystem
{
    class SomeClass;

    class ScriptComponent
    {
    public:
  ScriptComponent(void)
{
m_pSomeClass = new SomeClass; //это в .cpp
}


  virtual ~ScriptComponent(void);

  SomeClass*  GetSomeClass(){return m_pSomeClass;}
    private:
  SomeClass*  m_pSomeClass;
    };
}


Враппер для экспорта в питон:

Код: Выделить всё

using namespace boost::python;

namespace ScriptSystem
{
    void ScriptComponentExport()
    {
  class_<scriptComponent>("ScriptComponent" , init<>())
      .def("GetSomeClass" , &ScriptComponent::GetSomeClass , return_internal_reference<>())
;
    }

}


Все это у мена работало если в питоне использовать ScriptComponent на прямую, но при наследовании:

Код: Выделить всё

import MyModule

class MyComponent( MyModule.ScriptComponent ):
    def __init__(self):
  pass
    def test(self):
  self.GetSomeClass().SomeMethod("test!")

def win_main():
    mc = MyComponent()
    mc.test()


выходит такой результат: :((

Boost.Python.ArgumentError: Python argument types in
ScriptComponent.GetSomeClass(MyComponent)
did not match C++ signature:
GetSomeClass(class ScriptSystem::ScriptComponent {lvalue})

зы. врядли конечно, но вдруг кто-то проходил эти грабли..
Спасибо сказали:
Ответить