Maison > développement back-end > C++ > Pourquoi la déduction partielle a-t-elle été supprimée des modèles de cours ?

Pourquoi la déduction partielle a-t-elle été supprimée des modèles de cours ?

Susan Sarandon
Libérer: 2024-11-11 13:55:03
original
1026 Les gens l'ont consulté

Why Was Partial Deduction Removed from Class Templates?

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);
Copier après la connexion

Dans ce scénario, si une déduction partielle était autorisée, la déduction attendue serait tuple. Cependant, tuple est également un type valide, créant une ambiguïté.

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 (&amp;input)[size]) : data(input) {}
    type_t (&amp;data)[size]{};
};
Copier après la connexion

Et son fonction d'assistance :

template <std::size_t S, typename T>
test<S, T> helper(T (&amp;input)[S]) { return input; }
Copier après la connexion

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
Copier après la connexion

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.
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal