首页  >  文章  >  后端开发  >  C 17 能否在类模板参数推导 (CTAD) 中部分推导模板参数?

C 17 能否在类模板参数推导 (CTAD) 中部分推导模板参数?

DDD
DDD原创
2024-10-25 06:38:02576浏览

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

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn