Émulation de l'héritage de modèle avec inférence de type automatique
La possibilité de spécifier automatiquement des arguments de modèle à l'aide de auto fournirait un raccourci pratique dans les situations où la saisie explicite les types complets peuvent être fastidieux ou complexes. Cependant, il est important de noter que C ne prend actuellement pas en charge l'émulation directe de template
Utilisation de macros pour une transmission pratique des arguments
En guise de solution de contournement, les macros peuvent être utilisées pour simuler l'inférence de type automatique. Prenons l'exemple suivant :
<code class="cpp">#define AUTO_ARG(x) decltype(x), x Foo f; f.bar<AUTO_ARG(5)>(); // Equivalent to f.bar<int, 5>() f.bar<AUTO_ARG(&Baz::bang)>(); // Equivalent to f.bar<decltype(&Baz::bang), &Baz::bang>()</code>
Bien que cette approche puisse simplifier la syntaxe d'appel, elle introduit des pièges potentiels et nécessite des appels de macro explicites.
Exploiter un générateur de modèles pour la déduction automatique
Une solution alternative consiste à créer une fonction de générateur de modèle :
<code class="cpp">template <typename T> struct foo { foo(const T&) {} // Perform specific actions }; template <typename T> foo<T> make_foo(const T& x) { return foo<T>(x); }</code>
Avec ce générateur, au lieu de spécifier explicitement le type d'argument du modèle :
<code class="cpp">foo<int>(5);</code>
Un peut utiliser les capacités de déduction de la fonction génératrice :
<code class="cpp">make_foo(5); // Deduces and creates foo<int>(5)</code>
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!