Restricting Function Overloads

Some class member functions have a number of overloads that differ in one parameter:

class QByteArray {
public:
...
static QByteArray number(int, int base = 10);
static QByteArray number(unsigned int, int base = 10);
static QByteArray number(long, int base = 10);
static QByteArray number(unsigned long, int base = 10);
static QByteArray number(long long, int base = 10);
static QByteArray number(unsigned long long, int base = 10);
...

In this case, it does not make sense to generate a binding for QByteArray number(int,...) since it is equivalent to QByteArray number(long long,...).

In the type system file, it is possible to specify a rule stating that the int overload is to be removed when an long long overload exists by using the <overload-removal> element:

<overload-removal type="long long" replaces="int"/>

The type attribute specifies the preferred type and the replaces attribute specifies a ‘;’-delimited list of types to be removed.

Note

This is limited to the first 4 arguments of types that are passed by value or const-ref.

Note

The rules are applied in the order specified. That is, a rule specifying that int replaces short should go before a rule rule specifying that long long replaces int.