Maison  >  Article  >  développement back-end  >  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
DDDoriginal
2024-11-09 02:12:011003parcourir

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

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

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

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

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!

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