[C++-sig] strange behavior with respect to numeric and Boolean overloads

Roman Yakovenko roman.yakovenko at gmail.com
Mon Mar 16 17:59:41 CET 2009


2009/3/16 Matthew Scouten (TT) <Matthew.Scouten at tradingtechnologies.com>:
> So here is some strange behavior I ran across with BP. A take a look at this
> example code:
>
>
>
> busybox.cpp:
>
>
>
> #include "stdafx.h"
>
>
>
> std::string foo_int   (int    arg) { return std::string("foo(int)
> Called"); }
>
> std::string foo_double(double arg) { return std::string("foo(double)
> Called"); }
>
> std::string foo_bool  (bool   arg) { return std::string("foo(bool)
> Called"); }
>
> BOOST_PYTHON_MODULE(busybox)
>
> {
>
>     bp::def("foo", foo_double);
>
>     bp::def("foo", foo_bool);
>
>     bp::def("foo", foo_int);
>
>
>
> }
>
> ...
>
> Now the order sensitivity is annoying, but I can figure out how to make it
> work right, and then comment the dickens out of the code. The real killer is
> that there does not seem to be any way to force BP to differentiate between
> a bool and an int. The only thing that has worked is to apply a name skew
> (ie: bp::def("foo_bool", foo_bool);). This works, but the users carp at me
> for changing the interface from the underlying library.
>
>
>
> Is there a better work around?

Yes:

1. rename your functions

2. introduce a function in Python, which selects "the right" function,
based on argument type.

> Is this a bug?

Take a look on the following doc:
http://www.language-binding.net/pyplusplus/documentation/functions/registration_order.html

HTH


-- 
Roman Yakovenko
C++ Python language binding
http://www.language-binding.net/


More information about the Cplusplus-sig mailing list