Maison  >  Article  >  développement back-end  >  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) ?

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
DDDoriginal
2024-10-25 06:38:02576parcourir

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>

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!

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