C++《模板进阶》

06-01 473阅读

在之前的C++《模板初阶》当中我们初步了解了在C++当中模板的作用,并且了解了模板类和模板函数的定义和实例化时的使用方式,那么接下来在本篇我将进一步的学习模板的相关概念,例如特化,非类型模板参数等,相信通过本篇的学习你将对模板有更深的理解,要求加油吧!!!

C++《模板进阶》


1.非类型模板参数

在之前我们使用模板时template模板之后的参数都是类型,其实除了类型参数之外C++还存在非类型模板参数,在此类型参数和非类型参数的区别如下所示:

类型形参:出现在模板参数列表中,跟在class或者typename之类的参数类型名称。
非类型形参:是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当成常量来使用。

#include
using namespace std;
namespace bite
{
	// 定义一个模板类型的静态数组
	template
	class array
	{
	public:
		T& operator[](size_t index) { return _array[index]; }
		const T& operator[](size_t index)const { return _array[index]; }
		size_t size()const { return _size; }
		bool empty()const { return 0 == _size; }
	private:
		T _array[N];
		size_t _size;
	};
}

注:

1. 浮点数、类对象以及字符串是不允许作为非类型模板参数的。

2. 非类型的模板参数必须在编译期就能确认结果。 

 

2.模板特化

通常情况下,使用模板可以实现一些与类型无关的代码,但对于一些特殊类型的可能会得到一些

错误的结果,需要特殊处理。

例如:以下实现了一个专门用来进行小于比较的函数模板。

//在此假设在以上已经实现日期类Date
// 函数模板 -- 参数匹配
template
bool Less(T left, T right)
{
    return left 
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

相关阅读

目录[+]

取消
微信二维码
微信二维码
支付宝二维码