Maison >développement back-end >C++ >Pourquoi la déduction partielle a-t-elle été supprimée des modèles de cours ?
Déduction pour les modèles de classe
La déduction des arguments de modèle pour les modèles de classe vise à rationaliser le comportement entre les modèles de fonction et les modèles de classe. Cependant, la proposition incluait initialement une déduction partielle, où seul un sous-ensemble d'arguments serait explicitement spécifié.
Préoccupations liées à la déduction partielle
La préoccupation soulevée par Botond Ballo met en évidence le potentiel pour confusion dans les cas où une déduction partielle peut conduire à des interprétations ambiguës. Par exemple :
tuple<int> t(42, "waldo", 2.0f);
Dans ce scénario, si une déduction partielle était autorisée, la déduction attendue serait tuple
Comportement actuel
En raison de ces problèmes, la déduction partielle pour les modèles de classe a été supprimée de la proposition. Actuellement, la déduction ne peut être appliquée qu'à tous les arguments du modèle ou à aucun.
Exemple
Considérez le modèle de classe suivant :
template <std::size_t S, typename T> struct test { test(T (&input)[size]) : data(input) {} type_t (&data)[size]{}; };
Et son fonction d'assistance :
template <std::size_t S, typename T> test<S, T> helper(T (&input)[S]) { return input; }
Dans le code donné :
int buffer[5]; auto a = helper<5, int>(buffer); // No deduction auto b = helper<5>(buffer); // Type deduced auto c = helper(buffer); // Type and size deduced
Seule la déduction complète est autorisée, comme le démontre l'erreur lors de la tentative de déduction uniquement du type :
auto b = helper<5>(buffer); // Type deduced: FAILS.
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!