Maison > développement back-end > C++ > Comment les fonctions de modèle peuvent-elles être transmises comme arguments en C ?

Comment les fonctions de modèle peuvent-elles être transmises comme arguments en C ?

Patricia Arquette
Libérer: 2024-11-02 13:10:02
original
954 Les gens l'ont consulté

How Can Template Functions be Passed as Arguments in C  ?

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>
Copier après la connexion

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>
Copier après la connexion

Dans cet exemple, a et b sont encapsulés en tant que fonctions membres statiques dans des structures. fonction prend une structure de modèle comme argument, représentant essentiellement la fonction de modèle à appeler. En passant cette structure, la fonction foo spécifique peut être exécutée pour différents types.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal