Essa é meio complicada, mas dá para passar uma função como parametro em C++. Primeiramente, a gente declara a função que vou passar para a outra:
#include <stdio.h>
void println(const char *str) {
printf("%s\n",str);
}
Agora vamos criar a função que recebe a anterior como parametro:
void alo_mundo(void (func)(const char *str) ) {
func("Alo mundo");
}
Vendo a função acima, a gente percebe que o parametro passado tem a seguinte estrutura:
void -> o tipo do retorno da função passada
(func) -> o nome da função (variável)
(const char *str) -> o argumento da função passada
Ou seja, quando você passa uma função, você precisa saber a estrutura do cabeçalho dela (o retorno e os parametros). Existe um jeito de deixar genérico, mas isso vai para uma outra dica. :P
Com isso, a gente pode executar a função assim:
int main(int num_args, char** args) {
alo_mundo(println);
}
Em Javascript também dá para passar uma função como argumento, só que de um jeito bem mais fácil:
//Função que será passada como argumento
var println = function(str) {
document.write(str + "\n");
}
//Função que recebe outra função como argumento
var alo_mundo = function(func) {
func("Alo mundo");
}
//Executa a função
alo_mundo(println);
Coisa de doido não? :P
Até o próximo post!
2 comentários:
Você disse que existe um forma de deixar genérica, pode indicar o link onde eu encontro?
Um jeito que eu sei, é usando argumentos variáveis com ponteiros de "void":
http://stackoverflow.com/questions/2457498/generic-function-pointers-in-c
Mas, pelo que vi, também dá para usar template:
http://stackoverflow.com/questions/9779105/generic-member-function-pointer-as-a-template-parameter
Postar um comentário