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

网站开发的背景与环境做网站排名优化的公司

网站开发的背景与环境,做网站排名优化的公司,建设网店网站,直播软件app模板的特化 1.概念2.函数模板特化3.类模板的特化3.1 全特化3.2 偏特化3.2.1 部分特化3.2.2 参数更进一步的限制 4.总结 1.概念 在原模板类的基础上,针对特殊类型所进行特殊化的实现方式 2.函数模板特化 步骤 1.必须要先有一个基础的函数模板 2.关键字 template后面接…

模板的特化

  • 1.概念
  • 2.函数模板特化
  • 3.类模板的特化
    • 3.1 全特化
    • 3.2 偏特化
      • 3.2.1 部分特化
      • 3.2.2 参数更进一步的限制
  • 4.总结

1.概念

在原模板类的基础上,针对特殊类型所进行特殊化的实现方式

2.函数模板特化

步骤

1.必须要先有一个基础的函数模板
2.关键字 template后面接一对空白的尖括号<>
3.函数名后跟一对<>,<>中指定需要特化的类型
4.函数形参表:必须要和模板函数的基础参数类型完全相同,如果不同 编译器可能会报一些奇怪的错误

#include <iostream>
using namespace std;
//先创建一个日期类
class Date
{
public:Date(int year, int month, int day):_year(year), _month(month), _day(day){cout << "Date(int year, int month, int day)" << endl;}bool operator<(const Date& d){if (_year < d._year)return true;else if (_year == d._year){if (_month < d._month){return true;}else if (_month == d._month){return _day < d._day;}}return false;}bool operator==(const Date& d){return _year == d._year && _month == d._month && _day == d._day;}
private:int _year;int _month;int _day;
};
// 函数模板 -- 参数匹配
template<class T>
bool Less(T left, T 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;
}

上述示例中,p1指向的d1显然小于p2指向的d2对象,但是Less内部并没有比较p1,p2指向对象的内容,而比较的是p1,p2指针的地址,这就无法达到预期的答案。
此时需要对函数模板进行特化

// 对Less函数模板进行特化
template<>
bool Less<Date*>(Date * left, Date * right)
{return *left < *right;
} 

注意:一般情况下,如果函数模板遇到不能处理或者处理有误的类型,为了实现简单通常都是将改函数直接给出

bool Less(Date* left, Date* right)
{return *left < *right;
}

该种实现简单明了,代码的可读性高,容易书写。

3.类模板的特化

3.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;
};

3.2 偏特化

3.2.1 部分特化

将模板参数类表中的一部分参数特化

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;
};

3.2.2 参数更进一步的限制

偏特化不仅仅是指特化部分参数,而是针对模板参数更进一步的条件限制所设计出来的一个特化版本

template<class T1, class T2>
class Data
{
public :Data() { cout << "Data<T1, T2>" << endl; }
private:T1 _d1;T2 _d2;
};//两个参数偏特化为指针类型
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;
};

4.总结

优点:

  • 模板复用了代码,节省资源
  • 增强了代码的灵活性

缺点:

  • 模板会导致代码膨胀问题,也会导致编译时间变长
  • 出现模板编译错误时,错误信息非常凌乱,不易定位错误
http://www.ds6.com.cn/news/33741.html

相关文章:

  • 手机网页图片显示不出来宁波seo教程网
  • 阿里云做网站怎么样搜索 引擎优化
  • 做西服的网站网站制作app
  • 网站短信验证怎么做百度搜索下载app
  • 一个公司做两个网站网络互联网推广
  • 上海php网站开发中国知名网站排行榜
  • wordpress评论框制作百度优化排名
  • 温州做阀门网站公司网站不收录怎么办
  • 梅州企业网站建设公司全网
  • 义乌品牌网站建设seo群发软件
  • 网站区域名是什么意思汕头seo网站推广
  • 免费建站平台的源码互联网优化
  • 现代网站开发技术世界球队最新排名
  • 邵阳网站推广谷歌关键词排名优化
  • 永兴集团网站产品市场调研怎么做
  • 网站建设论文设计关键词自动生成器
  • 青岛营销型网站制作免费发广告网站
  • 我想做个网站seo网络推广外包公司
  • 唐山网站制作网络公司百度客服人工电话24小时
  • 注册外贸网站有哪些问题泉州全网营销优化
  • dw做不了动态网站asp搜索引擎的优化和推广
  • 厦门有设计网站的吗昆明seo推广外包
  • 兰州网络推广服务合同seo兼职外包
  • 网站建设售后报价下载一个百度导航
  • 易语言如何做网站登录国外网站设计
  • 秦皇岛网站建设西安百度框架户
  • 网站建设利益今日头条号官网
  • 咋做黄页网站seo关键词快速排名
  • 怎么给新公司做网站nba篮网最新消息
  • 作风建设年网站上海网站排名推广