[C++-sig] operator+(A, B) without B::B() default constructor in boost.python
Hans Roessler
hansroessler at yahoo.de
Sat May 16 11:48:36 CEST 2009
Thank you for suggesting the workaround. But I would like to understand _why_ the operator overloading doesn't work the Boost.Python way in my example (or what I have done wrong).
It can be quite tedious to write a wrapper like __add__ for each operator and pair of classes, and I thought the ".def(self <op> other)" syntax was implemented for exactly this purpose?
Hans
----- Ursprüngliche Mail ----
> Von: Sebastian Walter <walter at mathematik.hu-berlin.de>
> An: Development of Python/C++ integration <cplusplus-sig at python.org>
> Gesendet: Freitag, den 15. Mai 2009, 11:02:23 Uhr
> Betreff: Re: [C++-sig] operator+(A, B) without B::B() default constructor in boost.python
>
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Hans Roessler schrieb:
>
> Hello Hans,
>
> in my experience .def(self+other) often didn't quite do what I expected.
> You could try something like that:
>
> int int__add__A_B(const A &lhs, const B &rhs){
> return operator+(A,B);
> }
>
> .def("__add__", &int__add__A_B)
>
>
> i.e. first define a non-overloaded function int_add__A_B and then bind it to
> __add__ (which is the Python operator+ function).
>
> regards,
> Sebastian
>
>
> > Hello,
> > how can I wrap the following overloaded operator+ using boost.python?
> > The code as is fails with
> >> ...
> >> pytest.cpp: In function ‘void init_module_pytest()’:
> >> pytest.cpp:19: error: expected primary-expression before ‘(’ token
> >> ...
> > If I try ".def(self+B())" instead of ".def(self+other())", the error is
> >> ...
> >> pytest.cpp: In function ‘void init_module_pytest()’:
> >> pytest.cpp:17: error: no matching function for call to ‘B::B()’
> >> ...
> >
> > best wishes
> > Hans
> >
> >
> > pytest.cpp:
> >
> > #include
> > using namespace boost::python;
> >
> > class A{
> > public:
> > };
> > class B{
> > public:
> > B(int i){};
> > };
> >
> > int operator+(const A& a,const B& b){return 42;};
> >
> > BOOST_PYTHON_MODULE(pytest)
> > {
> > class_("A")
> > .def(self+other()) //.def(self+B()) //line 17
> > ;
> > class_("B",init) //line 19
> > ;
> > }
> >
> >
> >
> > _______________________________________________
> > Cplusplus-sig mailing list
> > Cplusplus-sig at python.org
> > http://mail.python.org/mailman/listinfo/cplusplus-sig
>
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v2.0.4-svn0 (GNU/Linux)
> Comment: Using GnuPG with SUSE - http://enigmail.mozdev.org
>
> iD8DBQFKDS+f9PBA5IG0h0ARAnfLAJ9rGkoAUY9c2FUgJTIcWx+AFN1akACdHg7s
> MAVRLstiqwAtaf9RmDsLXko=
> =b8b/
> -----END PGP SIGNATURE-----
> _______________________________________________
> Cplusplus-sig mailing list
> Cplusplus-sig at python.org
> http://mail.python.org/mailman/listinfo/cplusplus-sig
More information about the Cplusplus-sig
mailing list