C++中的模版

本文详细介绍了C++中的函数模板和类模板。函数模板提供了一种泛型编程的方法,允许编译器根据参数类型自动生成代码。讨论了函数模板的类型自推、实例化(隐式和显示)、特例化以及与普通函数的重载。类模板则是一种用于创建一系列相似类的抽象,通过实例化生成不同成员数据类型的类。同时,文章还探讨了类模板的声明和实例化方式。
摘要由CSDN通过智能技术生成

一、函数模版

函数模板不是一个实在的函数,编译器不能为其生成可执行代码。定义函数模板后只是一个对函数功能框架的描述,当它具体执行时,将根据传递的实际参数决定其功能。

函数模板类型自推:能够根据参数类型自动推演出模板类型参数。

1、语法格式

template<类型形式参数表>

返回类型 函数名(形式参数表)

{ }

2、函数模板的实例化

编译时期根据模板调用的类型方式,自动生成一份对应于该类型的代码 
1)显示实例化:显示实例化也称为外部实例化。在不发生函数调用的时候将函数模板实例化,或者在不使用类模板的时候将类模板实例化称之为模板显示实例化。

2)隐式实例化:函数模板隐式实例化指的是在发生函数调用的时候,如果没有发现相匹配的函数存在,编译器就会寻找同名函数模板,如果可以成功进行参数类型推演,就对函数模板进行实例化。


隐式实例化:​​​​​​

//函数模板
template<typename T>
bool compare(const T a,const T b)
{
	cout << "bool compare(T a, T b)   " << typeid(T).name() << endl;
	return a > b;
}

int main()
{
    //隐式实例化
    compare(3,4);
    return 0;
}

显式实例化: 

template<typename T>
bool compare(const T a,const T b)
{
	cout << "bool compare(T a, T b)   " << typeid(T).name() << endl;
	return a > b;
}


//显示实例化
template void compare<int>(const int&,const int&);

 3、函数模版的特例化
特例化是实例化一个模板,而非重载它。特例化不影响参数匹配。参数匹配都以最佳匹配为原则。

格式:

tem

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值