En C, comment une fonction de modèle peut-elle être utilisée comme argument de modèle pour réaliser la réutilisation du code tout en maintenir une fonctionnalité générique, en particulier lorsque les fonctions impliquées elles-mêmes sont également des modèles ?
Pour résoudre ce problème, utilisez un paramètre de modèle de modèle. Le concept principal est que les paramètres de modèle ne peuvent pas inclure directement les fonctions de modèle en raison de la nécessité d'une instanciation préalable. Une solution de contournement consiste à utiliser des structures factices pour encapsuler la fonction modèle :
<code class="cpp">template <typename T> struct a { static void foo(T = T()) {} }; template <typename T> struct b { static void foo(T = T()) {} }; struct SomeObj {}; struct SomeOtherObj {}; template <template <typename P> class T> void function() { T<SomeObj>::foo(); T<SomeOtherObj>::foo(); } int main() { function<a>(); function<b>(); }</code>
Dans cet exemple, les structures a et b implémentent des fonctions de modèle pour la méthode foo. Le modèle de fonction prend un paramètre de modèle de modèle, nous permettant de passer les modèles a et b comme arguments. Au sein de la fonction, des instances spécifiques des structures factices sont créées, permettant l'invocation de foo avec différents types de paramètres.
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!