Fonction de modèle en tant qu'argument de modèle expliquée
En C, la programmation générique peut être réalisée à l'aide de pointeurs de fonction ou de modèles. Les modèles offrent de l'efficacité car ils permettent au compilateur d'intégrer des fonctions, ce qui entraîne de meilleures performances.
Considérez un scénario dans lequel deux fonctions, a et b, effectuent des opérations similaires mais avec de légères variations. Pour éviter la duplication de code, une fonction générique peut être définie à l'aide de modèles :
<code class="c++">template<void (*param)(int)> void function() { param(123); param(456); }</code>
Ce modèle prend un pointeur de fonction comme argument, permettant la sélection à l'exécution de la fonction spécifique à exécuter. Dans l'exemple, la fonction<> peut être appelé avec a ou b comme argument.
Fonctions de modèle avec arguments de modèle
Cependant, des limitations surviennent lorsque a et b sont eux-mêmes des fonctions génériques. Les paramètres de modèle peuvent être des types, des types de modèles ou des valeurs, dont aucun ne prend directement en charge la transmission de fonctions de modèle en tant qu'arguments.
Pour surmonter ce défi, on peut utiliser des « paramètres de modèle de modèle ». Cependant, l’utilisation d’une fonction de modèle comme type nécessite une instanciation, ce qui la rend peu pratique. Une solution de contournement consiste à utiliser des structures factices :
<code class="c++">struct a { static void foo () {}; }; struct b { static void foo () {}; }; template <template <typename P> class T> void function () { T<SomeObj>::foo (); T<SomeOtherObj>::foo (); } int main () { function<a>(); function<b>(); }</code>
Dans cet exemple, a et b sont encapsulés en tant que fonctions membres statiques dans des structures. fonction
Par conséquent, cette approche permet de définir des fonctions génériques qui peuvent accepter des fonctions de modèle comme arguments, permettant un code flexible et réutilisable dans les génériques 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!