C++: Ponteiro para métodos/funções sobrecarregadas

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;
This entry was posted in CPP and tagged , , , . Bookmark the permalink.

3 Responses to C++: Ponteiro para métodos/funções sobrecarregadas

  1. rmendes says:

    Não é possível declarar funções com o mesmo nome e tipos de retorno diferentes em C++

  2. 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;

  3. Rodrigo says:

    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 ;)

Comments are closed.