Boost.Python 1.42 documentation shows how to overload virtual functions
using boost::python::wrapper::get_override. I made the example work.

Now I am struggling with a inheritance problem with virtual functions
calling each other, with a mix and match of Python and C++ implementation of
a common base.

I saw that in the distribution's "test" directory, as well as in the paper
"Building Hybrid System with Boost.Python", call_method and boost::ref are
used instead of wrapper::get_override.

What is the difference between the two approach ? Given a class hierarchy
like the one below, wich road should I take ?

//Simplified C++ version
struct Base {
    virtual int f() = 0;
    virtual void call_f(Base &b) { this->f(); b.f(); } /* this pointer will
always be specialized */
}

struct BaseWrap : Base, /*should I inherit from wrapper here... */
{
     int f() {  /* or use call_method here ??? */
}

struct Derived1 : Base /* or BaseWrap ? */
{
   int f() { return 1; }
}

struct Derived2 : Base /* or BaseWrap ? */
{
   int f() { return 2; }
}

#Extended in Pyhton
class PyDerived1(Derived1):
    def f(self):
        return -Derived1.f(self); #Calling the ancestor class is a
requirement

class PyDerived2(Derived2):
    def f(self):
        return -Derived2.f(self); #Calling the ancestor class is a
requirement

#And called like this
py1 = PyDerived1()
py2 = PyDerived2()

py1.call_f(py2)


TIA,

--
Guillaume
_______________________________________________
Cplusplus-sig mailing list
Cplusplus-sig@python.org
http://mail.python.org/mailman/listinfo/cplusplus-sig

Reply via email to