C 17 中的部分类模板参数推导
C 17 中的类模板参数推导 (CTAD) 使编译器能够从提供的参数。虽然此功能允许自动推导,但是否可以部分指定模板参数并将其余部分留给编译器推导?
C 17 中的部分推导
目前,CTAD 需要全部或全部模板参数规范。然而,已经有人尝试通过P1021R0等提案引入部分扣除。虽然这些提案尚未被接受,但对别名模板 (P1814) 和聚合 (P1816) 的支持已纳入 C 20 工作草案中。
解决方法
在由于缺乏本机部分推导,这里有一个潜在的解决方法:
<code class="cpp">template<class T, class U> using NewBase2 = Base<T, U, double>; // Usage void func() { NewBase2<bool, int> val(1, 2); }</code>
通过引入 NewBase2 作为 Base 的别名,您可以部分指定模板参数(T 和 U),同时允许编译器推导剩余的部分一 (V) 基于 func() 中的用法。
注意: 此解决方法需要显式指定别名模板参数,这在某种程度上违背了 CTAD 的目的。
以上是C 17 能否在类模板参数推导 (CTAD) 中部分推导模板参数?的详细内容。更多信息请关注PHP中文网其他相关文章!