-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 That, you will have to ask the devs. The question is however: what is quicker: wrapping 20 functions manually with copy/paste or trying to understand boost::python resp. wait for an answer from the devs. It is my impression, that you have to know a lot about boost::python to understand why something does not work as it should.
If someone knows the answer, I'd be also be interested, of course ;) Hans Roessler schrieb: > 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 >> > 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 _______________________________________________ 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 -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.4-svn0 (GNU/Linux) Comment: Using GnuPG with SUSE - http://enigmail.mozdev.org iD8DBQFKERmU9PBA5IG0h0ARAgFMAKCDx+DGod3m8c+nE4auuR0+dZjtIQCeIXHf S6X++I+Ilw74MqtKzvYWiCo= =dcH2 -----END PGP SIGNATURE----- _______________________________________________ Cplusplus-sig mailing list Cplusplus-sig@python.org http://mail.python.org/mailman/listinfo/cplusplus-sig