[C++-sig] Inheritance problem

Erik Türke tuerke at cbs.mpg.de
Sun Oct 24 23:10:44 CEST 2010


Hi!

I am trying to expose some c++ classes with boost.python.
Unfortunately, i have some trouble with the inheritance of classes which 
need a wrapper.

It is something like that:

class Base {
public:
    void someFunction() { doSomething; }
};

class BaseWrapper : public Base, boost::python::wrapper<Base> {
public:
     //constructor here
     void someFunctionWrapped() { doSomeThing and call 
Base::someFunction(); }
private:
     PyObject *self;
};

class Derived : public Base {};

class DerivedWrapper : public Derived, boost::python::wrapper<Derived> {
public:
//constructor here
private:
     PyObject *self;
  };


BOOST_PYTHON_MODULE( myModule )
{
     class_<Base, BaseWrapper ("Base", init<>() )
         .def( "someFunction", &BaseWrapper::someFunctionWrapped);

     class_<Derived, DerivedWrapper, bases<Base> > ("Derived", init<>());
}


In Python:

import myModule
derived = myModule.Derived()
derived.someFunction()

This crashes with a signature error:
Boost.Python.ArgumentError: Python argument types in
     Base.someFunction(Derived)
did not match C++ signature:
     someFunction(isis::python::BaseWrapped {lvalue})

If the function (here someFunction(Wrapped) ) was not declared in the 
wrapper class, it works. But unfortunately i need it there.
Is someone aware of this problem and can give me a hint? Thanks for your 
help!

Best regards!

Erik Türke
Department of Neurophysics
Max-Planck-Institute for Human Cognitive and Brain Sciences
Stephanstrasse 1A
04103 Leipzig
Germany
Tel: +49 341 99 40-2440
Email: tuerke at cbs.mpg.de
www.cbs.mpg.de



More information about the Cplusplus-sig mailing list