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
_______________________________________________
Cplusplus-sig mailing list
Cplusplus-sig@python.org
http://mail.python.org/mailman/listinfo/cplusplus-sig

Reply via email to