Dear list,

This is my first post here, so I'll briefly introduce myself. My name is
Sybren and I'm a PhD student at the Utrecht University. We use Boost a lot
in our C++-based framework, and naturally we use Boost::Python to create
our Python bindings. I want to combine two "features" that are documented
well separately, however so far I haven't been able to combine them. What I
want to do is have a class in C++ with virtual methods and override them in
a Python subclass, AND have those virtual methods use parameters with
default values. In short, I want to wrap a class like this:

class ExampleClass {
public:
    virtual std::string override_me(int x, int y=0, bool z=false) {
        std::stringstream msg;
        msg << "(x=" << x << ", y=" << y << ", z=" << z << ", base
implementation";
        return msg.str();
    }
};

And be able to produce a subclass in Python like this:

from cpp_module import ExampleClass
class Subclass(ExampleClass):
    def override_me(self, *args):
        return ExampleClass.override_me(self, *args) + " has been
overridden"

Of course all in such a way that when I pass a Subclass instance to an
ExampleClass parameter of C++ code, and that C++ code calls
instance.override_me(1, 2), it returns "x=1, y=2, z=false, base
implementation has been overridden".

I can't seem to find any documentation about this, and what I find on this
mailing list was posted several years ago and involves manually creating as
many methods as there are optional parameters. I hope that in recent
versions of Boost (I'm using 1.48 but have no problem upgrading to the
latest release) there is a more useful technique.

With kind regards,
-- 
Sybren A. Stüvel

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

Reply via email to