当前位置: 首页 > news >正文

服务好的岑溪网站开发咸鱼app引导页面设计模板

服务好的岑溪网站开发,咸鱼app引导页面设计模板,互联网开发是什么意思,wordpress禁止访问txt一、非类型模版参数 之前学习的模版,参数一般是某种类型,但其实非类型的参数也可以定义在模版里面,但也有一定的限制,只可以定义整形家族的参数,而且具有常量性 注意: 1. 浮点数、类对象以及字符串是不允…

一、非类型模版参数

之前学习的模版,参数一般是某种类型,但其实非类型的参数也可以定义在模版里面,但也有一定的限制,只可以定义整形家族的参数,而且具有常量性

注意:

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

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

namespace chk
{// 定义一个模板类型的静态数组template<class T, size_t N = 10>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.概念

模板的特化是针对一些较为特殊的情况,可以针对模板的某一种或者某一类实例化去进行特殊的处理,在某些场景下会特别方便

例如,在使用堆时若是想传指针,实际想比较的是指针所指向的内容时,可以对模版进行特化,在针对传模板参数为两个指针时进行特殊处理

// 函数模板 -- 参数匹配
template<class T>
bool Less(T left, T right)
{return left < right;
}
// 对Less函数模板进行特化
template<>
bool Less<Date*>(Date* left, Date* right)
{return *left < *right;
}
int main()
{cout << Less(1, 2) << endl;Date d1(2022, 7, 7);Date d2(2022, 7, 8);cout << Less(d1, d2) << endl;Date* p1 = &d1;Date* p2 = &d2;cout << Less(p1, p2) << endl; // 调用特化之后的版本,而不走模板生成了return 0;
}

2.特化

特化分为全特化和偏特化,其目的都是为了对模版部分实例化,根据不同的要求进行特殊的处理

特化的格式是:

对需要进行特化处理的部分参数,在template列表里不写,不进行特化的照写,到函数名后一一对应,将特化的部分给具体值或者类型,不特化的部分照写模板,例如:

template<class T,class U,char N>
class chk
{//...
}//全特化
template<>
class chk<int,double,5>
{//...
}//偏特化U为int
template<class T,char N>
class chk<T,int,N>
{//...
}

(1)全特化

全特化是指模板参数全确定的情况下,进行特殊处理,对所有模板参数都进行特化

template<class T1, class T2>
class Data
{
public:Data() {cout<<"Data<T1, T2>" <<endl;}
private:T1 _d1;T2 _d2;
};template<>
class Data<int, char>
{
public:Data() {cout<<"Data<int, char>" <<endl;}
private:int _d1;char _d2;
};

(2)偏特化

在部分情况下会需要针对某一种具体的情况进行处理,可以用全特化,而往往过多的可以是针对某一类情况进行特殊处理,偏特化的范围是比全特化的范围更大的

偏特化也分两种方式,一种是部分特化,一种是将模板参数进一步的限制,举个例子

template<class T1, class T2>
class Data
{
public:Data() {cout<<"Data<T1, T2>" <<endl;}
private:T1 _d1;T2 _d2;
};

这是用来给下面两种特化做对比举例的类

部分特化

将部分模板参数特化成具体的类型或者常量,例如:

// 将第二个参数特化为int
template <class T1>
class Data<T1, int>
{
public:Data() {cout<<"Data<T1, int>" <<endl;}
private:T1 _d1;int _d2;
};
对参数进一步限制

例如你穿过来的是指针或者是引用,则会走特化的那一块,这种特化的格式要注意,template里的参数不能省略

//两个参数偏特化为指针类型
template <typename T1, typename T2>
class Data <T1*, T2*>
{ 
public:Data() {cout<<"Data<T1*, T2*>" <<endl;}private:T1 _d1;T2 _d2;
};//两个参数偏特化为引用类型
template <typename T1, typename T2>
class Data <T1&, T2&>
{
public:Data(const T1& d1, const T2& d2): _d1(d1), _d2(d2){cout<<"Data<T1&, T2&>" <<endl;}private:const T1 & _d1;const T2 & _d2; };

三、模板的分离编译

模板通常不支持将声明和定义放在两个文件中进行编译,其原因是在链接前,两个文件分别进行预处理,编译,汇编,最后再链接,在编译阶段,由于模板的定义与声明分离,在定义部分并不会完成模板的实例化,也就无法具体的对类或函数里的内容进行编译,而在声明部分则是由于存在声明,依然通过了编译阶段,到了链接时,由于定义的部分未被实例化,因此找不到具体的地址去执行相关的函数,因此会出现链接错误

可以使用显示实例化解决,但这种方式并不推荐

通常我们选择将声明和定义放到同一个文件当中,较短的定义直接在类里面定义,较长的可以选择在类里面声明,在类外面(同一个文件中)定义。

四、模板的优缺点总结

【优点】

1. 模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生

2. 增强了代码的灵活性

【缺陷】

1. 模板会导致代码膨胀问题,也会导致编译时间变长

2. 出现模板编译错误时,错误信息非常凌乱,不易定位错误

http://www.yayakq.cn/news/220843/

相关文章:

  • 多个网站能否统一做等保住房和城乡建设部网站 城市绿地分类
  • 网站主页没有关键词vs加数据库做网站
  • 电脑网页打不开建设银行网站seo推广用什么做网站好
  • 建网站 找个人网站推广咋做的
  • 建站公司成功案例响应式wordpress博客主题
  • ps做网站字体用多大的天津注册公司网站
  • 建设局网站打不开是什么原因做网站课程报告
  • 网站建设公司的电话开发一个电商平台app要多少钱
  • 企业网站营销实现方式解读网页搜索引擎大全
  • html5网站源码php网站建设2017主流代码语言
  • 个人做视频网站行业网站建站
  • 网站更换服务器需要重新备案吗小吃网站建设
  • 珠海建站网站模板wordpress 伪静态组件
  • 太原建设网站公司邮箱域名
  • 建立网站的步骤是什么做软件挣钱的网站
  • 网站开发过程记录册学院的网站建设的er图怎么画
  • 淮北矿业集团工程建设公司网站seo的理解
  • 微博营销的优势和劣势优化大师电脑版官网
  • 广州自适应网站建设百度指数的基本功能
  • 技术支持 哈尔滨网站建设推荐西安优秀的高端网站建设公司
  • 怎么建设大型商务网站月夜直播在线观看视频免费播放
  • 更新网站的方法杭州品牌网站
  • jsp网站建设教程国内十大微信小程序开发公司
  • 江苏设计网站电话郑州seo价格
  • 专业企业网站搭建推荐天健oa管理系统
  • 如何做好网站内连中国最大的软件外包公司
  • 特色的企业网站建设网站开发博客
  • 网站后台管理系统进不去怎么办简述网站建设的作用
  • 网站广告条怎么做排名函数rank怎么用
  • 深圳市网站设网络营销首先要做什么