Maison > développement back-end > C++ > le corps du texte

Les modèles C peuvent-ils émuler un « modèle » pour une transmission d'arguments simplifiée ?

Patricia Arquette
Libérer: 2024-11-05 10:56:01
original
827 Les gens l'ont consulté

Can C   Templates Emulate `template` for Simplified Argument Passing?

Transmission d'arguments simplifiée pour les modèles C

Dans les modèles C, les arguments sont transmis explicitement à l'aide des paramètres du modèle. Bien que cela offre contrôle et flexibilité, cela peut être fastidieux pour certains scénarios, en particulier lorsqu'il s'agit de types complexes tels que des pointeurs vers des fonctions de membre.

La question se pose : pouvons-nous émuler le comportement d'un modèle

Il s'avère que C ne fournit pas de support direct pour cela. L'alternative la plus proche consiste à utiliser des macros, qui introduisent de la verbosité et peuvent être sujettes aux erreurs.

Approche basée sur les macros

<code class="cpp">#define AUTO_ARG(x) decltype(x), x

f.bar<AUTO_ARG(5)>();
f.bar<AUTO_ARG(&Baz::bang)>();</p>
<p><strong>Approche basée sur le générateur</strong></p>
<p></p>
<pre class="brush:php;toolbar:false"><code class="cpp">template <typename T>
struct foo
{
    foo(const T&amp;) {} // do whatever
};

template <typename T>
foo<T> make_foo(const T&amp; x)
{
    return foo<T>(x);
}</code>
Copier après la connexion
Approche basée sur le générateur

<code class="cpp">make_foo(5); // equivalent to foo<int>(5)
make_foo(&Baz::bang); // equivalent to foo<decltype(&Baz::bang)>(&Baz::bang)</code>
Copier après la connexion
Alternativement, nous pouvons exploiter un générateur de code pour obtenir un effet similaire. Voici une approche possible :

Cela permet de déduire l'argument du modèle :

Bien que cette approche génératrice élimine le besoin de paramètres de modèle explicites, elle introduit une indirection et peut ne convient pas à tous les scénarios.En fin de compte, la meilleure approche dépend des exigences spécifiques du projet et du niveau souhaité de simplicité, de flexibilité et de maintenabilité.

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