En C 17, la déduction d'arguments de modèle de classe (CTAD) permet la déduction d'arguments de modèle en fonction des arguments transmis à un fonction ou constructeur. Cependant, ce processus nécessite actuellement que tous ou aucun des arguments soient spécifiés.
La question se pose de savoir s'il est possible de spécifier partiellement les arguments du modèle et de faire déduire les arguments restants. Par exemple :
<code class="cpp">Base<V = bool> val1(1, 4.); // U & V deduced --> Base<int, double, bool> Base<T = bool, T =int> val2(5.); // V deduced --> Base<bool, int, double></code>
Cependant, tenter d'utiliser des modèles d'alias pour y parvenir, tels que :
<code class="cpp">template<class T, class U> using Base2 = Base<T, U, double>; void func() { NewBase2 val(1, 2); }</code>
entraîne une erreur de compilation.
Actuellement, CTAD ne prend pas en charge la déduction partielle. L'article P1021R0, qui proposait cette fonctionnalité, n'a pas été accepté. Cependant, C 20 peut inclure la prise en charge des modèles d'alias (P1814) et des agrégats (P1816), ce qui pourrait constituer une solution de contournement.
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!