Para obter ponteiros a métodos ou funções sobrecarregadas, como exemplo:
class Foo { public: void bla(int a); int bla() const; };
Se tentarmos usar o nome da função diretamente, o compilador não saberá a qual dos métodos você se refere. Para sair da ambiguidade, necessitamos usar a “assinatura” (os tipos dos parâmetros e do valor retornado) da função indiretamente, possivelmente com o uso de variáveis temporárias:
void (Foo::*ptr1)(int)= &Foo::bla; int (Foo::*ptr2)() const= &Foo::bla;
Não é possível declarar funções com o mesmo nome e tipos de retorno diferentes em C++
Se os argumentos forem diferentes, é perfeitamente possível. E também métodos que diferem pelo const, p.ex, begin()/end() em containers no STL:
iterator begin();
const_iterator begin() const;
Não é possível? Pelo amor de “Deus”! C++ não é tão engesado quanto normalmente tentam pintar.
Passando a impossibilidade ¬¬’:
“Bla.h”
class Bla
{
public:
template
T foo();
};
“Bla.cpp”
template
int Bla::foo( )
{
return 123;
}
template
float Bla::foo( )
{
return 123.4;
}
# end ;)