Maison  >  Article  >  développement back-end  >  Pourquoi les arguments de modèle par défaut ne peuvent-ils pas être utilisés pour les modèles de fonctions membres en C ?

Pourquoi les arguments de modèle par défaut ne peuvent-ils pas être utilisés pour les modèles de fonctions membres en C ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-27 12:38:01895parcourir

Why Can't Default Template Arguments Be Used for Member Function Templates in C  ?

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

En C, les arguments de modèle par défaut ne sont autorisés que pour les modèles de classe. Cette restriction soulève la question de savoir pourquoi de tels arguments ne peuvent pas être définis pour les modèles de fonctions membres.

Considérons l'exemple suivant :

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

Dans cet exemple, une tentative est faite pour définir un type par défaut pour le paramètre de modèle T dans un modèle de fonction membre, mais cette syntaxe n'est pas autorisée par C . Au lieu de cela, les arguments de modèle par défaut sont strictement limités aux modèles de classe.

Raisonnement derrière la restriction

L'interdiction des arguments de modèle par défaut pour les modèles de fonction découle de raisons historiques. Dans les premières versions de C , les fonctions autonomes n'étaient pas entièrement intégrées au système de modèles du langage. Pour encourager l'utilisation de modèles de fonctions membres, considérés comme plus idiomatiques, les arguments de modèle par défaut ont été limités aux modèles de classe.

Cependant, cette restriction a depuis été reconnue comme une limitation, car elle différencie inutilement les modèles de fonctions membres. et des modèles de fonctions autonomes. Comme l'a souligné Bjarne Stroustrup dans un rapport de défauts :

"L'interdiction des arguments de modèle par défaut pour les modèles de fonction est un vestige mal engendré... [elle] restreint sérieusement le style de programmation en rendant inutilement les fonctions autonomes différentes des fonctions membres. ."

Mise à jour C 0x

En réponse à ces préoccupations, C 0x a introduit des arguments de modèle par défaut pour les modèles de fonctions autonomes. Ce changement permet plus de flexibilité et de cohérence dans la programmation des modèles.

Exemple

Considérez le code C 0x suivant :

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

Dans cet exemple , un argument de modèle par défaut est spécifié pour le paramètre de modèle Comp, permettant à l'algorithme de tri d'utiliser la fonction de comparaison moins standard par défaut.

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