Maison >développement back-end >C++ >Les modèles C peuvent-ils émuler un « modèle » pour une transmission d'arguments simplifiée ?
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 Cela permet de déduire l'argument du modèle : 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!<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&) {} // do whatever
};
template <typename T>
foo<T> make_foo(const T& 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 :