Um delegado em C é uma construção de programação que permite passar um ponteiro de função como um argumento. Isso permite que você crie retornos de chamada que podem ser invocados de forma assíncrona ou em diferentes contextos.
Existem várias abordagens para implementar delegados em C , incluindo:
Functors são objetos que definem uma função operador(), tornando-os efetivamente chamáveis.
struct Functor { int operator()(double d) { return (int)d 1; } };
Expressões Lambda fornecem uma sintaxe concisa para criar delegados inline:
auto func = [](int i) -> double { return 2 * i / 1.15; };
Ponteiros de função diretos podem ser usados para representar delegados:
int f(double d) { ... } typedef int (*MyFuncT)(double d);
Ponteiros para funções de membro fornecem uma maneira rápida de criar delegados para membros de classe:
struct DelegateList { int f1(double d) { } int f2(double d) { } }; typedef int (DelegateList::* DelegateType)(double d);
std::function é um modelo C padrão que pode armazenar qualquer chamada, incluindo lambdas, functors, e ponteiros de função.
#includestd::function f = [any of the above];
Binding permite que você aplique parcialmente argumentos a um delegado, tornando-o conveniente para chamar funções de membro:
struct MyClass { int DoStuff(double d); // actually (MyClass* this, double d) }; std::functionf = std::bind(&MyClass::DoStuff, this, std::placeholders::_1);
Os modelos podem aceitar qualquer chamável que corresponda à lista de argumentos:
templateint DoSomething(FunctionT func) { return func(3.14); }
Delegates são uma ferramenta versátil em C que permite aprimorar a flexibilidade e a capacidade de manutenção do seu código. Ao escolher a abordagem de delegação apropriada para suas necessidades específicas, você pode efetivamente passar funções como parâmetros, lidar com retornos de chamada e implementar programação assíncrona em C .
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3