Maison > Article > développement back-end > Pourquoi les arguments de modèle par défaut sont-ils limités aux modèles de classe en C ?
En C, les arguments de modèle par défaut ne sont autorisés que sur les modèles de classe mais pas sur les modèles de fonction. Cette restriction peut sembler surprenante, mais elle a plusieurs raisons.
Les arguments de modèle par défaut permettent aux modèles de classe de fournir une valeur par défaut pour certains paramètres. Cela peut être utile lorsqu'il est peu probable que la valeur par défaut change pour la plupart des instances du modèle. Par exemple, un modèle de classe pour un algorithme de tri pourrait avoir un argument de modèle par défaut pour la fonction de comparaison utilisée dans le tri.
Cependant, les arguments de modèle par défaut ne sont pas autorisés pour la fonction modèles car ils introduiraient une ambiguïté. Considérons l'exemple hypothétique suivant :
<code class="cpp">struct my_class { template<class T = int> void mymember(T* vec) { // ... } };</code>
Dans cet exemple, il ne serait pas clair si T est le type par défaut pour la fonction mymember ou pour le modèle my_class lui-même. Cette ambiguïté pourrait conduire à des erreurs subtiles dans le code.
Avant C 11, l'interdiction des arguments de modèle par défaut pour les modèles de fonctions était une limitation importante. Cependant, C 11 a introduit une nouvelle fonctionnalité appelée « alias de type » qui nous permet de définir des alias pour les types. Cela fournit une solution de contournement au manque d’arguments de modèle par défaut pour les modèles de fonctions. Par exemple, l'exemple ci-dessus pourrait être réécrit comme suit :
<code class="cpp">struct my_class { typedef int default_type; template<class T = default_type> void mymember(T* vec) { // ... } };</code>
Bien que les alias de type ne soient pas aussi pratiques que les arguments de modèle par défaut, ils offrent une fonctionnalité similaire et nous permettent de surmonter les limitations de la norme C actuelle. .
Dans un rapport de défauts, Bjarne Stroustrup, le concepteur original de C , a exprimé son point de vue sur l'interdiction des arguments de modèle par défaut pour les modèles de fonction :
L'interdiction des arguments de modèle par défaut pour les modèles de fonction est un vestige malencontreux de l'époque où les fonctions autonomes étaient traitées comme des citoyens de seconde classe et exigeaient que tous les arguments de modèle soient déduits des arguments de fonction plutôt que spécifiés.
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!