c++的泛型编程及模板

一..模板函数

(2)用模板定义函数

template <typename T0,typename T1,typename T2> 
T0 print(T1 arg1, T2 arg2)      //arg1和arg2是两个形参
{
  cout<<arg1<<" "<<arg2<<endl; 
}

(3)调用模板函数

print<void,int,int>(23,44);     //<>里是实例化T0和T1和T2的数据类型(省略时,编译器根据实参自动判断)

 

二..模板类

template<class T>
class Operate{
    public:
    static T add(T a,T b){
        return a+b;
    }
    static T Mul(T a,T b){
        return a*b;
    }
    static T Judge(T a,T b=1){
        if(a>=0)
        return a;
        else
        return a/b;
    }
};

注意:

template<class T>与template<typename T>,,class和typename是等价的,都是类型的含义,

 

 

####################################分割线################################

参数可变模板函数:

// Arguments是模板数据类型的一个句柄,用户可随便写,args则是递归的句柄,每次返回下一个参数值
template <typename... Arguments> returntype functionname(Arguments... args); 
#include<iostream>
#include<cstdarg>
using namespace std;
 
//用来终止递归并处理包中最后一个元素
template<typename T>
void print(const T& t)
{
	cout << t;
}
 
template<typename T, typename...Args>
void print(const T& t, const Args&...rest)
{
	cout << t << " ";    //打印第一个实参
	print(rest...);     //递归调用,打印其它实参
}
 
int main()
{
	print("Harris", 2, 3.14f, "April", 42);     //输出:"Harris"  2  3.14f  "April"  42
	cout << endl;
	return 0;
}

参数可变模板类:

template<typename... Arguments> class classname;  
// Arguments 是参数包。 类 classname 可以接受参数数目可变。
#include<iostream>
#include<cstdarg>
using namespace std;
 
template<typename...Types>
class Tuple
{
};
Tuple<> t0;
Tuple<int> t1;
Tuple<int, string> t2;

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值