C 中基于函数返回类型的模板推导
在 C 中,可能需要利用模板推导来简化实例化泛型的代码基于函数参数的数据类型的函数。考虑以下示例:
GCPtr ptr1 = GC::Allocate();
GCPtr ptr2 = GC::Allocate();
我们的目标是使用 GC::Allocate() 函数的返回类型来实现此推导,而不是显式指定泛型类型参数。但是,C 不允许根据返回类型进行类型推导。
class GC
{
public:
template
static GCPtr Allocate();
};
尽管返回类型是通用的,但编译器在实例化 GC::Allocate() 函数时需要显式指定模板类型参数 和 。
为了缓解这个限制,可以引入一个辅助函数:
template
void Allocate(GCPtr& p) {
p = GC::Allocate();
}
利用这个函数,可以达到原来的目的:
GCPtr p;
Allocate(p);
此语法是否比显式类型规范提供任何显着优势是主观的。
注意: 在 C 11 中,可以省略一个使用 auto 关键字的类型声明:
auto p = GC::Allocate(); // p is of type GCPtr
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3