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 <wal...@mathematik.hu-berlin.de> > An: Development of Python/C++ integration <cplusplus-sig@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@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@python.org > http://mail.python.org/mailman/listinfo/cplusplus-sig _______________________________________________ Cplusplus-sig mailing list Cplusplus-sig@python.org http://mail.python.org/mailman/listinfo/cplusplus-sig