[C++-sig] Problem with overloading between int and double

Jim Bosch talljimbo at gmail.com
Thu May 20 03:41:52 CEST 2010


On 05/19/2010 06:23 PM, Thomas Daniel wrote:
> The python wrappers created by boost don't seem to distinguish between
> create(int) and create(double), although they do notice create(const char*):
>    
>
<snip>
> Any ideas what I do wrong?
>
>    

You aren't doing anything wrong.  The problem is that the boost.python 
overload matcher for double also matches integers (I think it probably 
should, generally), and that's getting tried first; only when the first 
overload fails does Boost.Python try another.

A workaround is to change the order to expose them (the last one exposed 
gets tried first):

BOOST_PYTHON_MODULE(Test) {
     class_<Test>("Test")
         .def("create", (Test (*)(double))&Test::create)
         .def("create", (Test (*)(int))&Test::create)
         .def("create", (Test (*)(const char*))&Test::create)
         .def("get_type",&Test::get_type)
         .staticmethod("create")
     ;
}


I admit it's not a very satisfying solution.  Maybe someone else has a 
better idea, but I think fixing this in Boost.Python would require a lot 
of work.

Jim Bosch


More information about the Cplusplus-sig mailing list