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!