Articles of pointers de function

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.