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
Susan Sarandonoriginal
2024-11-11 13:55:031028parcourir

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

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]{};
};

Et son fonction d'assistance :

template <std::size_t S, typename T>
test<S, T> helper(T (&amp;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!

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