Maison >développement back-end >C++ >Pourquoi les arguments de modèle par défaut sont-ils limités aux seuls modèles de classe en C ?

Pourquoi les arguments de modèle par défaut sont-ils limités aux seuls modèles de classe en C ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-27 13:35:29555parcourir

Why Are Default Template Arguments Restricted to Only Class Templates in C  ?

Arguments de modèle par défaut : pourquoi se limiter aux modèles de classe ?

Malgré la commodité offerte par les arguments de modèle par défaut, ils sont curieusement limités aux modèles de classe , laissant les programmeurs se demander pourquoi ils ne peuvent pas être appliqués aux modèles de fonctions membres.

L'argument pour les arguments de modèle par défaut dans les modèles de fonction

Prenons l'exemple d'une my_class avec un membre modèle de fonction :

<code class="cpp">struct my_class {
  template<class T = int>
  void mymember(T* vec) {
    // ...
  }
};</code>

Intuitivement, spécifier un type par défaut pour T dans le modèle de fonction membre est logique. Cependant, C impose la restriction selon laquelle les arguments de modèle par défaut ne sont autorisés que pour les modèles de classe.

La raison derrière la restriction

La limitation découle de raisons historiques lorsque les fonctions autonomes étaient considérée comme inférieure aux fonctions de membre. En forçant tous les arguments de modèle à être déduits des arguments de fonction, cela garantissait un traitement cohérent.

L'avenir des arguments de modèle par défaut dans les modèles de fonction

C 0x a reconnu les limites de la restriction existante. L'inclusion d'arguments de modèle par défaut pour les modèles de fonctions améliore la flexibilité du codage et s'aligne sur le style de programmation STL.

Selon Bjarne Stroustrup, le partisan de ce changement, l'interdiction des arguments de modèle par défaut pour les modèles de fonction est « une erreur mal engendrée ». reste." Il fait valoir que cela différencie inutilement les fonctions autonomes des fonctions membres, ce qui rend difficile le maintien de la cohérence du code.

Avantages des arguments de modèle par défaut dans les modèles de fonction

L'introduction de Les arguments de modèle par défaut dans les modèles de fonctions permettent une expérience de codage plus rationalisée et intuitive. Par exemple, considérons le cas d'une fonction de tri :

<code class="cpp">template<typename Iterator,
         typename Comp = std::less<
            typename std::iterator_traits<Iterator>::value_type> >
void sort(Iterator beg, Iterator end, Comp c = Comp()) {
  ...
}</code>

Avec l'argument de modèle par défaut pour Comp, la fonction de tri peut être appelée avec ou sans comparateur explicite, simplifiant la syntaxe et augmentant la lisibilité du 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!

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