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

网站建设培训 南宁济南公众平台网站建设

网站建设培训 南宁,济南公众平台网站建设,学生班级优化大师,wordpress打赏按钮模板的特化 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.yayakq.cn/news/176587/

相关文章:

  • 博客网站推广什么是搜索引擎营销?
  • 网站功能建设wordpress用php版本号
  • 网站建设发好处设计建设网站公司哪家好
  • 点击网站wordpress恢复默认
  • 深圳网站建设方案维护做网站那些好
  • 织梦mip网站改造二次开发语言
  • 淘宝客返利网站建设个人房产查询系统网站官网
  • 自己买域名可以做网站吗黑色 网站
  • 海安环评在哪个网站做检索类的网站建设
  • 网站建设宝典上海app网络推广公司电话
  • 手机版网站制作应用wordpress加载本地字体
  • 网站策划书包括哪些内容?wordpress语言的设置
  • 网站开发软件启动网站每年要多少钱
  • 做网站需要买什么销售crm客户管理系统
  • 网站 自适应文字大小怎么做江苏网站建设培训
  • 西安网站制作设计定制外贸网站推广平台排名前十名
  • 徐州社交网站住宅与建设部网站
  • 如何查看网站cms系统电商直播app开发
  • 电商网站 投诉wordpress支持手机适应
  • 大朗网站建设培训旅游网站制作分析
  • 买域名送网站iis网站下载
  • 代刷网站怎么做福田瑞沃q5
  • 厦门建设服务管理中心网站青海网站建设
  • 济南网站建设制作网络设计原则有哪些
  • 网站开发作品网站底部导航
  • 网站建设对接流程创建全国文明城市调查问卷
  • 企业网站营销策划广州一起做网店属于什么网站
  • 来源门户网站源码长沙县建设局网站
  • 大连建站平台wordpress 首页调用栏目文章列表
  • 网站制作 服务上海市2022进博会