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
[email protected]
http://mail.python.org/mailman/listinfo/cplusplus-sig