C++之模板与泛型编程(上)

少壮不努力,老大搞IT(工厂)

最近写我的框架用到了模板,对这个东西不懂,乱猜搞了些上去,勉强通过编译,其实我的下理解是定义类型罢了害羞,下面就看书总结下

模板----》需求多态性

举个简单例子:

example:

template<typename T>

int compare(const T &v1,const T&v2)

{

if(v1 > v2 ) return 1;

if(v1 < v2) retrun -1;

return 0;

}


形参表:

template<{class|typename} arg[,{..}...]>


使用函数模板时,心悦编译器会推断哪个模板实参绑定到模板形参。一旦编译器确定了实际的模板实参,就称它实例化了函数模板的一个实例。


用在类上

template<class Type> class Queue 

{

Type &front(); // 返回该种类型

const Type &front() const;

...

}

使用:

Queue<int> q;

Queue<vector<double>> q;

Queue<string> q;

_______________________________________

 typename 与class

typename 是后来加入c++标准,旧的程序只能使用class

新程序用typename 更为直观

关于类型属性问题

example:

template<class Parm,class U>

Parm fcn(Parm* array, U value)

{

Parm::size_type *  p ;  // size_type是一个类型还是一个成员呢 

}

编译器是默认为一个成员的,如果是表达为类型,则要显式告诉编译器,如下:

template<class Parm,class U>

Parm fcn(Parm* array, U value)

{

typename Parm::size_type *  p ;  // size_type是一个类型

}

其实上面的做法不好,感觉太高级,但太容易出错的大笑


非类型模板形参

初始化一个数组

example :

template<class T,size_t N> void array_init(T (&parm)[N])

{

for(size_t  i=0; i!=N; ++i){

parm[i] = 0;

}

}

use:

int x[12];

double y[100]

array_init(x);

array_init(y);


上面这个例子可以用来初始化一个数据的值为某一值。高级!奋斗










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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值