C++模板的知识学习

一.函数模板

1.抽象

先来例子:

template <typename T, typename S>
auto add(T x1, S x2)//C++14
{
	return (x1+x2);
}

以上就是一个函数模板,也是对类型的参数化。
这种类型的抽象可以用于函数返回值、局部变量和函数参数中。

2.实例化

int main()
{
	auto y = add(1, 2.0);
	return 0;
}

以上就是一种函数模板实例化,即模板函数
实际上,函数模板实例化有显式和隐式两种。

显式实例化

强制某些函数实例化,可出现于程序中模板定义后的任何位置

template <typename T>
void f(T a)
{
	std::cout << a << '\n';
}
template void f<double>(double);

template void f<>(char);

template void f(int);

隐式实例化

#include <iostream>
template<typename T>
void f(T a)
{
	std::cout << a << '\n';
}

int main()
{
	f<double>(1);
	f<>('a');
	f(7);
	void (*ptr) (std::string) = f;
}

二.类模板

1.抽象

让我们来看看这两段关于类定义的代码

class intarray
{
	int* it;
	int size;
public:
	intarray(int arraysize);
	int GetMax();
	int GetMin();
	int GetSize(){return size;}
};
class floatarray
{
	float* it;
	int size;
public:
	floatarray(int arraysize);
	float GetMax();
	float GetMin();
	int GetSize(){return size;}
};

这两个类的内涵十分相似,差别仅在于元素类型不同,其他地方十分相似。若将类型作为参数,就可能用另一个抽象结构产生这两个类乃至更多的array类。

下面开始将类型参数化,即抽象出来

template<class T>
class Array
{
	T* ptdata;
	int size;
public:
	Array(int arraysize);
	T GetMax();
	T GetMin();
	int GetSize(){return size;}
};

一个类是一组对象的抽象,一个类模板是一组类的抽象。
引入类模板的目的:对结构特征和行为特征相似,但成员的类型不能保证相同的一组类,进行高一级的抽象,以提高程序的重用性和规格化程度。
类模板的一个重要作用是对类库提供了强有力的支持。

2.实例化

对上述的类模板进行实例化

Array<int> intarray(10);
//类模板生成的实例(类)及其实例(对象)的生成和操作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值