Tuesday, July 2, 2013

Functions CANNOT overload based on the Return Type!

Can a function get overload based on its return type? As follows :- 
class My {
public:
    int get(int);
    char get(int); }
NO! You can't overload methods based on return type!, As mentioned in above snippet.

Overload resolution takes into account the function signature
A function signature is made up of:
  • function name
  • cv-qualifiers
  • parameter types
And here's the quote:
1.3.11 signature
the information about a function that participates in overload resolution (13.3): its parameter-type-list (8.3.5) and, if the function is a class member, the cv-qualifiers (if any) on the function itself and the class in which the member function is declared. [...]
Options:
1) change the method name:
class My {
public:
    int getInt(int);
    char getChar(int);
};
2) out parameter:
class My {
public:
    void get(int, int&);
    void get(int, char&);
}
3) templates... overkill in this case.

No comments:

Post a Comment