Utilisation des paramètres de modèle de modèle en C
Considérez un scénario dans lequel vous disposez de plusieurs fonctions, telles que a() et b(), qui effectuer des tâches similaires avec différentes implémentations internes. Pour éviter la redondance du code, vous pouvez créer une fonction générique à l'aide de modèles. Cependant, si a() et b() sont eux-mêmes génériques, implémenter la fonction externe comme modèle peut ne pas suffire.
Dans ce contexte, vous pouvez recourir aux paramètres de modèle de modèle. Bien que les modèles acceptent généralement des types, des paramètres de type de modèle ou des valeurs, vous ne pouvez pas transmettre directement une fonction de modèle de modèle en tant que type car elle nécessite une instanciation.
Pour surmonter ce problème, vous pouvez utiliser une solution de contournement impliquant des structures factices :
<code class="cpp">template <typename T> struct a { static void foo() {} }; template <typename T> struct b { static void foo() {} };</code>
Ces structures agissent comme des espaces réservés pour le paramètre de modèle de modèle. La fonction elle-même devient :
<code class="cpp">template <template <typename P> class T> void function() { T<SomeObj>::foo(); T<SomeOtherObj>::foo(); }</code>
Vous pouvez désormais utiliser la fonction générique avec différentes implémentations de foo() en passant le modèle de structure factice approprié :
<code class="cpp">int main() { function<a>(); function<b>(); }</code>
Alors que les pointeurs de fonction fournissent un solution de contournement plus simple dans ce scénario spécifique, les paramètres de modèle de modèle offrent une solution plus générale aux problèmes nécessitant des fonctionnalités génériques avec plusieurs implémentations.
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!