Ponteiros para funções em C ++

Quando um aplicativo estiver em execução, as funções na aplicação existir na memória-assim como qualquer outra coisa na memória, eles têm um endereço. E ter um endereço é bom, porque dessa forma, as pessoas podem encontrá-lo.

Você pode pegar o endereço de uma função, levando o nome dele e colocar o endereço-de operador () Na frente do nome da função, como este:

address = MyFunction-

Mas para fazer este trabalho, você precisa saber que tipo de declarar endereço. o endereço variável é um ponteiro para uma função, e a maneira mais limpa para atribuir um tipo é usar um typedef. (Felizmente, este é um momento em que a maioria das pessoas estão dispostas a usar um typedef.)

Aqui está o typedef, Acredite ou não:

int typedef (* FunctionPtr) (int) -

É difícil de seguir, mas o nome do novo tipo é FunctionPtr. Este define um tipo de chamada FunctionPtr que retorna um inteiro (mais à esquerda int) E leva um número inteiro como um parâmetro (o mais à direita int, que deve ser em parênteses).

A parte do meio desta declaração é o nome do novo tipo, e você deve precedê-lo por um asterisco, o que significa que é um ponteiro para todo o resto da expressão. Além disso, você deve colocar o nome do tipo e sua asterisco anterior entre parênteses.

E então você está pronto para declarar algumas variáveis! Aqui vai:

endereço FunctionPtr = MyFunction-

Esta linha declara endereço como um ponteiro para uma função e inicializa a MyFunction (). Agora, para que isso funcione, o código para MyFunction () devem ter o mesmo protótipo declarado no typedef: Neste caso, deve ter um número inteiro como um parâmetro e retornar um inteiro.

Assim, por exemplo, você pode ter uma função como esta:

int TheSecretNumber (int x) {return x + 1}

Então você pode ter um a Principal() que armazena o endereço desta função em uma variável - e, em seguida, chama a função usando a variável:

int main (int argc, char * argv []) {int typedef (* FunctionPtr) (int) endereço -int MyPasscode = 20 = FunctionPtr TheSecretNumber-cout lt; lt; endereço (MyPasscode) lt; lt; endl-}

Agora, só assim você pode dizer que você já viu isso, aqui está o que o endereço declaração seria semelhante sem usando um typedef:

int (* endereço) (int) = TheSecretNumber-

A oferta deve ser que você tem duas coisas em lado parênteses a lado, eo conjunto da direita tem apenas tipos dentro dela. O da esquerda tem um nome de variável. Portanto, esta linha não está declarando um de tipo em vez disso, ele está declarando uma variável.

menu