C 中基于函数返回类型的模板推导
在 C 中,最好利用模板推导来简化实例化泛型的代码基于函数参数的数据类型的函数。考虑以下示例:
<code class="cpp">GCPtr<A> ptr1 = GC::Allocate(); GCPtr<B> ptr2 = GC::Allocate();</code>
我们的目标不是显式指定泛型类型参数,而是使用 GC::Allocate() 函数的返回类型来实现此推导。然而,C 不允许根据返回类型进行类型推导。
<code class="cpp">class GC { public: template<typename T> static GCPtr<T> Allocate(); };</code>
尽管返回类型是泛型,但编译器需要显式指定模板类型参数; 和实例化 GC::Allocate() 函数时。
为了缓解这个限制,可以引入一个辅助函数:
<code class="cpp">template <typename T> void Allocate(GCPtr<T>& p) { p = GC::Allocate<T>(); }</code>
使用这个函数,可以实现最初的目标,如下:
<code class="cpp">GCPtr<A> p; Allocate(p);</code>
此语法是否比显式类型规范提供任何显着优势是主观的。
注意:在 C 11 中,可以省略以下之一使用 auto 关键字的类型声明:
<code class="cpp">auto p = GC::Allocate<A>(); // p is of type GCPtr<A></code>
以上是C 可以从函数返回类型推导出模板类型吗?的详细内容。更多信息请关注PHP中文网其他相关文章!