[C++-sig] operator+(A, B) without B::B() default constructor in boost.python
Sebastian Walter
walter at mathematik.hu-berlin.de
Fri May 15 11:02:23 CEST 2009
-----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<B>())", 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 <boost/python.hpp>
> 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>("A")
> .def(self+other<B>()) //.def(self+B()) //line 17
> ;
> class_<B,boost::noncopyable>("B",init<int>) //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-----
More information about the Cplusplus-sig
mailing list