[C++-sig] Re: Boost.Python : Byref parameters - no problems with static/non-static overloading

David Abrahams dave at boost-consulting.com
Mon Sep 29 20:05:07 CEST 2003


Joel Gerard <llywelyn.geo at yahoo.com> 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 suspicious. 
>
> 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 as
> 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
know.

> 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? 

No.

> 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
www.boost-consulting.com





More information about the Cplusplus-sig mailing list