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

Thomas Daniel thomasd57 at yahoo.com
Thu May 20 03:23:46 CEST 2010


I have a class with "create" methods for different types of arguments:
#include <boost/python.hpp>

class Test {
public:
    Test() {}
    Test(int x) : _type(x) {}
    static Test create(int)         { return Test(0); }
    static Test create(double)      { return Test(1); }
    static Test create(const char*) { return Test(2); }
    int get_type() const { return _type; }
private:
    int _type;
};

using namespace boost::python;

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

The python wrappers created by boost don't seem to distinguish between
create(int) and create(double), although they do notice create(const char*):
>>> from Test import *
>>> x = Test.create(0)
>>> print x.get_type()
1
>>> x = Test.create(0.0)
>>> print x.get_type()
1
>>> y = Test.create("hi")
>>> print y.get_type()
2


Any ideas what I do wrong?



More information about the Cplusplus-sig mailing list