Un délégué en C est une construction de programmation qui vous permet de passer un pointeur de fonction comme argument. Cela vous permet de créer des rappels qui peuvent être invoqués de manière asynchrone ou dans différents contextes.
Il existe différentes approches pour implémenter les délégués en C , notamment :
Les foncteurs sont des objets qui définissent une fonction Operator(), les rendant effectivement appelables.
struct Functor { int operator()(double d) { return (int)d 1; } };
Les expressions Lambda fournissent une syntaxe concise pour créer des délégués en ligne :
auto func = [](int i) -> double { return 2 * i / 1.15; };
Les pointeurs de fonction directs peuvent être utilisés pour représenter les délégués :
int f(double d) { ... } typedef int (*MyFuncT)(double d);
Les pointeurs vers les fonctions membres offrent un moyen rapide de créer des délégués pour les membres de la classe :
struct DelegateList { int f1(double d) { } int f2(double d) { } }; typedef int (DelegateList::* DelegateType)(double d);
std::function est un modèle C standard qui peut stocker n'importe quel appelable, y compris les lambdas, les foncteurs, et des pointeurs de fonction.
#includestd::function f = [any of the above];
Binding vous permet d'appliquer partiellement des arguments à un délégué, ce qui facilite l'appel des fonctions membres :
struct MyClass { int DoStuff(double d); // actually (MyClass* this, double d) }; std::functionf = std::bind(&MyClass::DoStuff, this, std::placeholders::_1);
Les modèles peuvent accepter tout appelable qui correspond à la liste d'arguments :
templateint DoSomething(FunctionT func) { return func(3.14); }
Les délégués sont un outil polyvalent en C qui vous permet d'améliorer la flexibilité et la maintenabilité de votre code. En choisissant l'approche déléguée appropriée à vos besoins spécifiques, vous pouvez transmettre efficacement des fonctions en tant que paramètres, gérer les rappels et implémenter une programmation asynchrone en C .
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3