Maison >développement back-end >C++ >Les modèles C peuvent-ils émuler un « modèle » pour une transmission d'arguments simplifiée ?

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

Patricia Arquette
Patricia Arquetteoriginal
2024-11-05 10:56:01855parcourir

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>
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>
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!

Déclaration:
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