"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como os delegados podem aumentar a flexibilidade e a capacidade de manutenção no código C++?

Como os delegados podem aumentar a flexibilidade e a capacidade de manutenção no código C++?

Publicado em 19/11/2024
Navegar:253

How Can Delegates Enhance Flexibility and Maintainability in C   Code?

Explicando o conceito versátil de delegados em C

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

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 (C 11 em diante)

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

Ponteiros de função diretos podem ser usados ​​para representar delegados:

int f(double d) { ... }
typedef int (*MyFuncT)(double d);

Ponteiro para funções de membro

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

std::function é um modelo C padrão que pode armazenar qualquer chamada, incluindo lambdas, functors, e ponteiros de função.

#include 
std::function f = [any of the above];

Binding (usando std::bind)

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::function f = std::bind(&MyClass::DoStuff, this, std::placeholders::_1);

Modelos

Os modelos podem aceitar qualquer chamável que corresponda à lista de argumentos:

template 
int 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 .

Tutorial mais recente Mais>

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