概述
由于template不支持函数的偏特化,所以我们需要利用重载来处理。
假如有一个函数create定义如下
template<class T,class U>
T* Create(const U & arg)
{
return new T(arg);
}
我们需要对这个函数偏特化处理,如果模板支持函数的偏特化,则应该是这样定义
//非法的定义
template<class U>
widget* Create<widget,U>(const U & arg)
{
return new widget(arg,-1);//由于widget的构造函数和上面T的构造函数不一样,所以需要单独处理
}
//理想中的使用方法,但是非法
String *p=Create<String,Integer>(1234);
widget *pw=Create<widget,Integer>(1234);//非法
为了解决这个问题,我们定义一个类型
template<typename T>
struct Type2Type{
typedef T OriginalType;
}
再分别定义上面的普通的模板函数和偏特化函数。如下
通过对函数Create的重载,利用两个不同的参数Type2Type<T>,Type2Type<widget>来间接的实现了对模板函数的偏特化。template<class T,class U> T* Create(const U & arg,Type2Type<T>) { return new T(arg); }
template<class U>
widget* Create(const U & arg,Type2Type<widget>) { return new widget(arg,-1); }
使用如下
String *p=Create(1234,Type2Type<String>);
widget *pw=Creat(1234,Type2Type<widget>);
最后
以上就是虚幻乌龟为你收集整理的模板函数的重载的全部内容,希望文章能够帮你解决模板函数的重载所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复