首页  >  文章  >  后端开发  >  C 中模板推导可以基于函数的返回类型吗?

C 中模板推导可以基于函数的返回类型吗?

Susan Sarandon
Susan Sarandon原创
2024-11-06 05:35:02690浏览

Can Template Deduction Work Based on a Function's Return Type in C  ?

根据返回类型对函数进行模板推导?

在 C 中,模板推导提供了一种基于函数确定模板参数的便捷方法提供给函数调用的参数。但是,模板推导有一定的限制,例如无法根据函数的返回类型推导类型参数。

问题:

原始问题旨在消除在以下代码中调用 Allocate() 函数时显式指定类型参数的需要:

<code class="cpp">GCPtr<A> ptr1 = GC::Allocate();
GCPtr<B> ptr2 = GC::Allocate();</code>

答案:

不幸的是,模板推导不能用于根据返回类型推导类型参数。相反,它是相反的:返回类型是在模板签名匹配后确定的。

解决方法:

要绕过此限制,可以使用 Allocate( ) 函数可以包装在辅助函数中,该函数对调用者隐藏类型参数:

<code class="cpp">// helper
template <typename T>
void Allocate(GCPtr<T>& p) {
   p = GC::Allocate<T>();
}

int main() {
   GCPtr<A> p = 0;
   Allocate(p);
}</code>

这允许调用者使用 Allocate() 函数而无需显式指定类型参数:

<code class="cpp">GCPtr<A> p = 0;
Allocate(p);</code>

附加说明:

C 11 引入了 auto 关键字,它允许编译器从初始值设定项推断类型。这进一步简化了代码:

<code class="cpp">auto p = GC::Allocate<A>(); // p is of type GCPtr<A></code>

以上是C 中模板推导可以基于函数的返回类型吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

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