[C++-sig] Re: Boost.Python : Byref parameters - no problems with static/non-static overloading
llywelyn.geo at yahoo.com
Tue Sep 30 23:12:40 CEST 2003
Ok. I've got things mostly sorted out. You can't overload static and non-static member
functions, which is fine, but how do you use a static (not overloaded) function in Python? I need
to keep the static function in the class scope. The reason is name collision, i.e.
static void foo();
static void foo();
static void Orthonormalize (Vector& kU, Vector& kV, Vector& kW);
void (*Orthonormalize2)(Vector&, Vector&, Vector&) = &Vector::Orthonormalize;
In python, do you just use it as an unbound method? Is the self argument non-existent in this
case, or do I do something different?
Currently I have:
Vector.Orthonormalize (Vector1, Vector2, Vector3)
Also, is there a good place to look for python examples. I didn't see a python example in the
docs, but perhaps there is something else?
--- David Abrahams <> wrote:
> Joel Gerard <> writes:
> > Thanks for the advice. There are a few things I'm still vague on though. I've been overloading
> > static, and non-static members without apparent problems, but I'm now starting to be
> > For instance, I have:
> > Vector (Vector::*CreateCross1)(const Vector&) const = &Vector::CreateCross ;
> > Vector (*CreateCross2)(const Vector&, const Vector&) = &Vector::CreateCross;
> > .def("CreateCross",CreateCross1)
> > .def("CreateCross",CreateCross2)
> > The one I call as a bound method, and the other unbound, i.e.:
> > Vector2 = Vector1.CreateCross(Vector3)
> > Vector2 = module.Vector.CreateCross(Vector1,Vector3)
> > Is something going on here that I'm not seeing. They work ok apparently.
> Both are calling CreateCross2.
> > Regarding the vector problem. I cannot modify the original C++ code. I want to keep Normalize
> > an unbound method in Vector since I might have name collisions if I
> > put them at the module level.
> What collisions? There's overloading at the module level too, you
> > I tried .def("Yahoo",Normalize3) but it too gave me a type
> > error. What is Boost trying to do?
> I have no idea; post a reproducible test case.
> Maybe you forgot to make it static?
> > The function pointer is poiting to the correct function.
> > Furthermore, don't you have to do something different than just a
> > plain .def since the arguments to Normalize are references?
> > Does Boost automatically detect this?
> It does detect that they are references.
> > How does it deal with something like:
> > Add(int x, int y, int &result)
> > So when you do >>>Add(x,y,result) in python, what happens?
> argument error, but that's because Python ints are immutable. Classes
> don't play by the same rules.
> > I think I'm missing something fundamental here... :(
> > Thanks for your help.
> > Joel
> Sure thing.
> Dave Abrahams
> Boost Consulting
> C++-sig mailing list
> C++-sig at python.org
Email: joelgerard at canada.com
Do you Yahoo!?
The New Yahoo! Shopping - with improved product search
More information about the Cplusplus-sig