Auto-Overloading

| Auto-Overloading

It was mentioned in passing in the previous section that `BOOST_PYTHON_FUNCTION_OVERLOADS` and `BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS` can also be used for overloaded functions and member functions with a common sequence of initial arguments. Here is an example:

`

         void foo()
         {
            /*...*/
         }

         void foo(bool a)
         {
            /*...*/
         }

         void foo(bool a, int b)
         {
            /*...*/
         }

         void foo(bool a, int b, char c)
         {
            /*...*/
         }

`

Like in the previous section, we can generate thin wrappers for these overloaded functions in one-shot:

`

        BOOST_PYTHON_FUNCTION_OVERLOADS(foo_overloads, foo, 0, 3)

`

Then...

`

        .def("foo", foo, foo_overloads());

`

Notice though that we have a situation now where we have a minimum of zero (0) arguments and a maximum of 3 arguments.

## Manual Wrapping

It is important to emphasize however that the overloaded functions must have a common sequence of initial arguments. Otherwise, our scheme above will not work. If this is not the case, we have to wrap our functions manually.

Actually, we can mix and match manual wrapping of overloaded functions and automatic wrapping through `BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS` and its sister, `BOOST_PYTHON_FUNCTION_OVERLOADS`. Following up on our example presented in the section on overloading, since the first 4 overload functins have a common sequence of initial arguments, we can use `BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS` to automatically wrap the first three of the `def`s and manually wrap just the last. Here's how we'll do this:

`

        BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(xf_overloads, f, 1, 4)

`

Create a member function pointers as above for both X::f overloads:

`

        bool    (X::*fx1)(int, double, char)    = &X::f;
        int     (X::*fx2)(int, int, int)        = &X::f;

`

Then...

`

        .def("f", fx1, xf_overloads());
        .def("f", fx2)

`

Copyright © 2002-2003 David Abrahams
Copyright © 2002-2003 Joel de Guzman
Permission to copy, use, modify, sell and distribute this document is granted provided this copyright notice appears in all copies. This document is provided "as is" without express or implied warranty, and with no claim as to its suitability for any purpose.