Chamada de função (C++)
O operador de chamada de função, invocado usando parênteses, é um operador binário.
primary-expression ( expression-list )
Comentários
Neste contexto, primary-expression é o primeiro operando e expression-list, uma possível lista de argumentos vazia, é o segundo. O operador de chamada de função é usado para operações que exigem um número de parâmetros. Isso funciona porque expression-list é uma lista em vez de um operando único. O operador de chamada de função deve ser uma função de membro não estático.
O operador de chamada de função, quando sobrecarregado, não modifica o modo como as funções são chamadas; modifica o modo como o operador deve ser interpretado quando aplicado aos objetos de um tipo de classe. Por exemplo, o código a seguir normalmente não teria sentido:
Point pt;
pt( 3, 2 );
Entretanto, com um operador de chamada de função sobrecarregado apropriado, essa sintaxe pode ser usada para deslocar a coordenada x 3 unidades e a coordenada y 2 unidades. O código a seguir mostra essa definição:
// function_call.cpp
class Point
{
public:
Point() { _x = _y = 0; }
Point &operator()( int dx, int dy )
{ _x += dx; _y += dy; return *this; }
private:
int _x, _y;
};
int main()
{
Point pt;
pt( 3, 2 );
}
Observe que o operador de chamada de função é aplicado ao nome de um objeto, não ao nome de uma função.
Você pode também sobrecarregar o operador de chamada de função usando um ponteiro para a função (em vez da própria função).
typedef void(*ptf)();
void func()
{
}
struct S
{
operator ptf()
{
return func;
}
};
int main()
{
S s;
s();//operates as s.operator ptf()()
}