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 des 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 pour 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 les pointeurs de fonction.
#include <functional> std::function<int(double)> f = [any of the above];
La liaison vous permet d'appliquer partiellement des arguments à un délégué, ce qui la rend pratique pour appeler des fonctions membres :
struct MyClass { int DoStuff(double d); // actually (MyClass* this, double d) }; std::function<int(double d)> f = std::bind(&MyClass::DoStuff, this, std::placeholders::_1);
Les modèles peuvent accepter n'importe quel appelable correspondant à la liste d'arguments :
template <class FunctionT> int 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 efficacement transmettre des fonctions en tant que paramètres, gérer les rappels et implémenter une programmation asynchrone en C .
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!