Класс С++:
Код: Выделить всё
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})
зы. врядли конечно, но вдруг кто-то проходил эти грабли..