Maison  >  Article  >  développement back-end  >  Pourquoi les arguments de modèle par défaut sont-ils uniquement autorisés pour les modèles de classe en C ?

Pourquoi les arguments de modèle par défaut sont-ils uniquement autorisés pour les modèles de classe en C ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-31 02:14:01821parcourir

Why are Default Template Arguments Only Allowed for Class Templates in C  ?

Arguments de modèle par défaut : modèles de classe et modèles de fonctions membres

Q :Pourquoi les arguments de modèle par défaut ne sont-ils autorisés que pour les modèles de classe ? Pourquoi pas également pour les modèles de fonctions membres ?

Exemple :

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

Selon C , les arguments de modèle par défaut ne sont valables que pour les modèles de classe.

A : Les arguments du modèle par défaut sont en effet utiles. Considérons 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>

Cependant, la justification de la restriction actuelle en C est ancrée dans les premiers jours du langage, lorsque les fonctions autonomes étaient considérées comme moins importantes. Par conséquent, ils devaient déduire tous les arguments de modèle à partir des arguments de fonction, excluant l'utilisation de valeurs par défaut.

Cette limitation entrave la flexibilité du code et la compatibilité avec les modèles de fonctions membres. Pour remédier à cela, C 0x a introduit des arguments de modèle par défaut pour les modèles de fonctions.

Comme Bjarne Stroustrup, le créateur de C, l'a déclaré dans un rapport de défaut :

"L'interdiction du modèle par défaut Les arguments pour les modèles de fonction sont un vestige mal engendré de l'époque où les fonctions autonomes étaient traitées comme des citoyens de seconde zone et exigeaient que tous les arguments des modèles soient déduits des arguments de la fonction plutôt que spécifiés. "

" La restriction restreint sérieusement le style de programmation. en rendant inutilement les fonctions autonomes différentes des fonctions membres, rendant ainsi plus difficile l'écriture de code de style STL."

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