Maison > développement back-end > C++ > Pourquoi la déduction des arguments du modèle de classe partielle est-elle toujours impossible ?

Pourquoi la déduction des arguments du modèle de classe partielle est-elle toujours impossible ?

DDD
Libérer: 2024-11-09 02:12:01
original
1062 Les gens l'ont consulté

Why is Partial Class Template Argument Deduction Still Unworkable?

Pourquoi la déduction d'argument de modèle de classe partielle reste insaisissable

Malgré les intentions de la proposition P0091 : Déduction d'argument de modèle pour les modèles de classe visant à aligner le comportement des modèles de fonctions et de classes, une déduction partielle pour les modèles de classe demeure irréalisable.

Considérez le modèle de classe :

template <std::size_t S, typename T>
struct test
{
    static constexpr auto size = S;
    using type_t = T;

    test(type_t (&amp;input)[size]) : data(input) {}
    type_t (&amp;data)[size]{};
};
Copier après la connexion

Lors de l'utilisation d'une fonction d'assistance pour faciliter l'utilisation :

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

Code tel que :

int buffer[5];

auto a = helper<5, int>(buffer); // No deduction
auto b = helper<5>(buffer);      // Type deduced: FAILS
auto c = helper(buffer);         // Type and size deduced
Copier après la connexion

compile avec succès. Cependant, dans les versions plus récentes du compilateur, la déduction partielle (c'est-à-dire auto b = helper<5>(buffer);) échoue, ce qui suggère que la déduction partielle des arguments du modèle de classe n'est en effet pas prise en charge.

Cette limitation découle de préoccupations soulevé concernant une confusion potentielle dans des cas tels que :

// Deduced as tuple<int, string, float>
// but tuple<int> is also a valid type!
tuple<int> t(42, "waldo", 2.0f);
Copier après la connexion

Par conséquent, alors que la proposition visait initialement à unifier le comportement de déduction, la déduction partielle pour les modèles de classe reste irréalisable en raison de problèmes d'ambiguïté potentiels.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal