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!