我是靠谱客的博主 虚幻乌龟,最近开发中收集的这篇文章主要介绍模板函数的重载,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

由于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;
}
再分别定义上面的普通的模板函数和偏特化函数。如下
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);
}
通过对函数Create的重载,利用两个不同的参数Type2Type<T>,Type2Type<widget>来间接的实现了对模板函数的偏特化。

使用如下

String *p=Create(1234,Type2Type<String>);
widget *pw=Creat(1234,Type2Type<widget>);


最后

以上就是虚幻乌龟为你收集整理的模板函数的重载的全部内容,希望文章能够帮你解决模板函数的重载所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(73)

评论列表共有 0 条评论

立即
投稿
返回
顶部