[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