Articles of pointers de function

Ponteiro de function C ++ (membro de class) para function de membro não estático

class Foo { public: Foo() { do_something = &Foo::func_x; } int (Foo::*do_something)(int); // function pointer to class member function void setFunc(bool e) { do_something = e ? &Foo::func_x : &Foo::func_y; } private: int func_x(int m) { return m *= 5; } int func_y(int n) { return n *= 6; } }; int main() { Foo […]

Como obter o nome da function do ponteiro da function em C?

Como obter o nome da function do ponteiro da function em C? Edit: O caso real é: Eu estou escrevendo um módulo do kernel do Linux e estou chamando funções do kernel. Algumas dessas funções são pointers e quero inspecionar o código dessa function na origem do kernel. Mas eu não sei qual function está […]

Como chamar através de um ponteiro de function de membro?

Eu estou tentando fazer alguns testes com o ponteiro de function de membro. O que está errado neste código? O bigCat.*pcat(); declaração não compila. class cat { public: void walk() { printf(“cat is walking \n”); } }; int main(){ cat bigCat; void (cat::*pcat)(); pcat = &cat::walk; bigCat.*pcat(); }

Como formatar um ponteiro de function?

Existe alguma maneira de imprimir um ponteiro para uma function em ANSI C? Claro que isso significa que você tem que lançar o ponteiro de function para anular o ponteiro, mas parece que não é possível? #include int main() { int (*funcptr)() = main; printf(“%p\n”, (void* )funcptr); printf(“%p\n”, (void* )main); return 0; } $ gcc […]

Lambda C ++ com capturas como um ponteiro de function

Eu estava jogando com C ++ lambdas e sua conversão implícita para pointers de function. Meu exemplo inicial foi usá-los como retorno de chamada para a function ftw. Isso funciona como esperado. #include #include using namespace std; int main() { auto callback = [](const char *fpath, const struct stat *sb, int typeflag) -> int { […]

Qual é o substituto mais próximo de um ponteiro de function em Java?

Eu tenho um método que tem cerca de dez linhas de código. Eu quero criar mais methods que fazem exatamente a mesma coisa, exceto por um pequeno cálculo que vai mudar uma linha de código. Este é um aplicativo perfeito para passar um ponteiro de function para replace essa linha, mas o Java não possui […]

Casting um ponteiro de function para outro tipo

Digamos que eu tenha uma function que aceita um ponteiro de function void (*)(void*) para uso como retorno de chamada: void do_stuff(void (*callback_fp)(void*), void* callback_arg); Agora, se eu tiver uma function como esta: void my_callback_function(struct my_struct* arg); Posso fazer isso com segurança? do_stuff((void (*)(void*)) &my_callback_function, NULL); Eu olhei para essa questão e observei alguns padrões […]

Passando lambda como ponteiro de function

É possível passar uma function lambda como um ponteiro de function? Se assim for, devo estar fazendo algo incorretamente porque estou recebendo um erro de compilation. Considere o seguinte exemplo using DecisionFn = bool(*)(); class Decide { public: Decide(DecisionFn dec) : _dec{dec} {} private: DecisionFn _dec; }; int main() { int x = 5; Decide […]

Por que as definições de ponteiro de function funcionam com qualquer número de e comercial ‘&’ ou asteriscos ‘*’?

Por que o seguinte trabalho? void foo() { cout << "Foo to you too!\n"; }; int main() { void (*p1_foo)() = foo; void (*p2_foo)() = *foo; void (*p3_foo)() = &foo; void (*p4_foo)() = *&foo; void (*p5_foo)() = &*foo; void (*p6_foo)() = **foo; void (*p7_foo)() = **********************foo; (*p1_foo)(); (*p2_foo)(); (*p3_foo)(); (*p4_foo)(); (*p5_foo)(); (*p6_foo)(); (*p7_foo)(); }

Como funcionam os pointers em C?

Eu tive alguma experiência ultimamente com pointers de function em C. Então, seguindo a tradição de responder suas próprias perguntas, decidi fazer um pequeno resumo das coisas básicas, para aqueles que precisam de um mergulho rápido no assunto.