[C++-sig] Re: Boost.Python : Byref parameters - no problems with static/non-static overloading
Joel Gerard
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.
class A
{
static void foo();
}
class B
{
static void foo();
}
I have:
class Vector
{
public:
static void Orthonormalize (Vector& kU, Vector& kV, Vector& kW);
}
Wrapped as:
void (*Orthonormalize2)(Vector&, Vector&, Vector&) = &Vector::Orthonormalize;
.def("Orthonormalize",Orthonormalize2)
.staticmethod("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?
Thanks,
Joel
--- 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
> 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
>
>
> _______________________________________________
> C++-sig mailing list
> C++-sig at python.org
> http://mail.python.org/mailman/listinfo/c++-sig
=====
--------------------------------------
Email: joelgerard at canada.com
__________________________________
Do you Yahoo!?
The New Yahoo! Shopping - with improved product search
http://shopping.yahoo.com
More information about the Cplusplus-sig
mailing list