Maison > développement back-end > C++ > le corps du texte

Le C 17 peut-il déduire partiellement les arguments du modèle dans la déduction des arguments du modèle de classe (CTAD) ?

DDD
Libérer: 2024-10-25 06:38:02
original
637 Les gens l'ont consulté

Can C  17 Partially Deduct Template Arguments in Class Template Argument Deduction (CTAD)?

Déduction partielle des arguments de modèle de classe en C 17

La déduction d'arguments de modèle de classe (CTAD) en C 17 permet au compilateur de déduire des arguments de modèle à partir de les arguments fournis. Bien que cette fonctionnalité permette la déduction automatique, est-il possible de spécifier partiellement les arguments du modèle et de laisser le reste au compilateur pour le déduire ?

Déduction partielle en C 17

Actuellement, CTAD nécessite une spécification d'argument de modèle tout ou rien. Cependant, des tentatives ont été faites pour introduire une déduction partielle par le biais de propositions telles que P1021R0. Bien que ces propositions n'aient pas été acceptées, la prise en charge des modèles d'alias (P1814) et des agrégats (P1816) a été intégrée au projet de travail C 20.

Solutions de contournement

Dans l'absence de déduction partielle native, voici une solution de contournement potentielle :

<code class="cpp">template<class T, class U> using NewBase2 = Base<T, U, double>;

// Usage
void func() {
    NewBase2<bool, int> val(1, 2);
}</code>
Copier après la connexion

En introduisant NewBase2 comme alias pour Base, vous pouvez spécifier partiellement les arguments du modèle (T et U) tout en permettant au compilateur de déduire le reste un (V) basé sur l'utilisation dans func().

Remarque : Cette solution de contournement nécessite de spécifier explicitement les arguments du modèle d'alias, ce qui va à l'encontre de l'objectif de CTAD dans une certaine mesure.

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