[C++-sig] pyplusplus: Feature requests
Matthias Baas
baas at ira.uka.de
Sun Feb 26 13:57:46 CET 2006
Hi,
now that I have a working module that I can play around with, I came
upon some stuff that I'd like to see in pyplusplus:
- When keywords are disabled on a constructor any optional argument is
turned into a non-optional argument. Pyste uses the optional<> construct
to set optional values. It would be great if pyplusplus would do that as
well, so that optional values are still optional even when keywords are
not specified. So for example, if there's a constructor that takes 3
doubles from which two are optional, Pyste generates:
.def(init< double, optional< double, double > >())
I haven't checked, but maybe this scheme even works with keyword
arguments...? (which would solve the registration order problem for
constructors)
- Copy constructors don't get wrapped
- Index operators don't get wrapped
- Friend functions that implement operators for a class don't get
wrapped (for example, if you have a 3D vector class and you implement
the scalar multiplication with a float you need such a friend function
if you also want to support the expression float*vec and not only
vec*float).
By the way, here I don't understand why I actually can multiply my
vectors with an integer (even from both sides), but not with a float
from the right side. The following are all the defs in my vector that
deal with multiplication:
MVector_exposer.def( bp::self * bp::self );
MVector_exposer.def( bp::self * bp::other< double >() );
MVector_exposer.def( bp::self * bp::other< MMatrix >() );
So why can I multiply my vector with an integer? (the C++ class does
allow that but the stuff isn't wrapped) And if I try to multiply a float
from the left side I get:
TypeError: can't multiply sequence by non-int
?!?
- When using a cache the order of enum values changes in the generated
source files from call to call. This leads to new compilations that
wouldn't be necessary.
- Are there any plans on adding some support for creating wrapper
methods in cases where they are absolutely necessary? Suppose you have a
method void getSize(int& width, int& height) that returns the resolution
of an image. pyplusplus currently wraps that method happily without
issuing a warning, but I'm not even able to call that function from
Python, let alone will it ever do what it's supposed to do. I don't
expect pyplusplus to deal with such cases in a fully automated manner
(as to date, reading the user's mind is still out of scope of such tools
;) but it could help the user resolve these things. A minimal aid would
simply be to report such methods that might not work in Python so that
the user knows he has to do something about it. Maybe for some cases we
could provide some automatic wrapper generation once the user has
specified which arguments are actually output values and shouldn't be
part of the argument list in Python.
- Matthias -
More information about the Cplusplus-sig
mailing list