Maison > développement back-end > C++ > Existe-t-il un équivalent « modèle » en C ?

Existe-t-il un équivalent « modèle » en C ?

Mary-Kate Olsen
Libérer: 2024-11-06 05:26:02
original
332 Les gens l'ont consulté

Is There a `template` Equivalent in C  ?

Pouvez-vous imiter un modèle?

Les capacités de métaprogrammation de modèles de C permettent aux développeurs de créer du code puissant et efficace. Cependant, dans certains scénarios, transmettre des arguments aux modèles peut s'avérer fastidieux. Considérez le code suivant :

<code class="cpp">struct Foo {
  template<class T, T X>
  void bar() {
    // do something with X, compile-time passed
  }
};

struct Baz {
  void bang() {}
};

int main() {
  Foo f;
  f.bar<int, 5>();
  f.bar<decltype(&Baz::bang), &Baz::bang>();
}</code>
Copier après la connexion

Dans cet exemple, nous devons spécifier explicitement les types et transmettre les valeurs réelles comme arguments à la barre de modèles.

Est-il possible de simplifier cette syntaxe ? Pourrions-nous l'exprimer ainsi :

<code class="cpp">struct Foo {
  template<auto X>
  void bar() {
    // do something with X, compile-time passed
  }
};

struct Baz {
  void bang() {}
};

int main() {
  Foo f;
  f.bar<5>();
  f.bar<&Baz::bang>();
}</code>
Copier après la connexion

La réponse :

Malheureusement, C ne fournit pas de moyen direct pour réaliser cette syntaxe. L'alternative la plus proche est les macros :

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

f.bar<AUTO_ARG(5)>();
f.bar<AUTO_ARG(&Baz::bang)>();</code>
Copier après la connexion

Une autre alternative : les générateurs

Si vous cherchez principalement un moyen d'éviter de spécifier explicitement des types , une fonction génératrice peut être une solution viable :

<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

Au lieu d'écrire :

<code class="cpp">foo<int>(5);</code>
Copier après la connexion

Vous pouvez utiliser :

<code class="cpp">make_foo(5);</code>
Copier après la connexion

Cela permet le type d'argument à déduire, simplifiant le code. Notez que cette approche n'émule pas directement le modèle syntaxe, mais il fournit une alternative pratique pour transmettre des arguments aux modèles.

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