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

设计师一般上什么网站软文范文200字

设计师一般上什么网站,软文范文200字,阜宁做网站价格,站长工具seo综合查询外部链接数量非类型模板参数 模板参数分为:类型模板参数与非类型模板参数 类型模板参数即:出现在模板参数列表中,跟在class或者typename之后的参数类型名称非类型模板参数即:用一个常量作为类(函数)模板的一个参数,在类(函数)模…

 非类型模板参数
 

模板参数分为:类型模板参数与非类型模板参数

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

注意:
浮点数、类对象以及字符串是不允许作为非类型模板参数的
非类型的模板参数必须在编译期就能确认结果
 

template<class T,size_t N>//非类型模板参数N
class Stack
{
private:T _a[N];
};

 模板的特化

概念

通常情况下,使用模板可以实现一些与类型无关的代码,但对于一些特殊类型的可能会得到一些错误的结果,需要特殊处理,简单来说,模板特化就是针对某些类型进行特殊化处理
以日期类为例,日期类的具体实现因为不是此次重点,,就不展示代码了,只需要知道日期类重载了关系运算符

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; // 可以比较,结果正确,日期类重载了关系运算符d1<d2可以进行比较Date* p1 = &d1;Date* p2 = &d2;cout << Less(p1, p2) << endl; // 可以比较,结果错误,比较的是两个指针,而不是指针指向的对象return 0;
}

此时,就需要对模板进行特化。即:在原模板类的基础上,针对特殊类型所进行特殊化的实现方式。模板特化中分为函数模板特化与类模板特化

函数模板特化
 

函数模板的特化步骤:

1 一定要有原模版

2 template后面接一对空的尖括号<>

3 函数名后跟一对尖括号,尖括号中指定需要特化的类型

template<class T>
bool Less(T left, T right)
{return left < right;
}template<>
bool Less<Date*>(Date*left, Date* right)//对Less函数模板进行特化
{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;
}

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

如:以下是正确写法

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

错误写法:

 正确写法设计的模板特化属实是优点不太适应,与其走模板特化,不如直接将具体比较函数直接给出:

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

函数模板特化在面对某些比较复杂的形参类型时,就显得不那么美好了,因此建议:函数模板可以不用特化,类模板用特化

类模板特化
 

全特化
 

全特化即是将模板参数列表中所有的参数都确定化

template<class T1,class T2>
class Date
{
public:Date(){cout << "Date<T1,T2>" << endl;}
private:T1 _d1;T2 _d2;
};template<>
class Date<int, char>//类模板全特化
{
public:Date(){cout << "Date<int,char>" << endl;}
private:int _d1;char _d2;
};int main()
{Date<int, int> d1;Date<int, char>d2;return 0;
}

偏特化

偏特化并不仅仅是指特化部分参数,更是对模版参数进一步进行条件限制设计的特化版本

比如对于以下模板类:
 

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

偏特化有以下两种表现方式:
一:部分参数特化

template<class T1>
class Date<T1,int>//偏特化
{
public:Date(){cout << "Date<T1,int>" << endl;}
private:T1 _d1;int _d2;
};

二:对模板参数更进一步条件限制

template<class T1, class T2>
class Date<T1*, T2*>//偏特化为指针类型
{
public:Date() { cout << "Data<T1*, T2*>" << endl; }
private:T1 _d1;T2 _d2;
};template<class T1, class T2>
class Date<T1&,T2&>//偏特化为引用类型
{
public:Date(){cout << "Date<T1&,T2&>" << endl;}
private:T1 _d1;T2 _d2;
};
int main()
{Date<int*, double*>d2;Date<int&, double&> d3;return 0;
}

类模板特化其他实例:

 原类模版Less:

template<class T>
class Less
{
public:bool operator()(const T& x, const T& y){return x < y;}
};int main()
{Date d1(2023, 10, 20);Date d2(2023, 9, 18);Date d3(2023, 10, 21);vector<Date> v1;v1.push_back(d1);v1.push_back(d2);v1.push_back(d3);sort(v1.begin(), v1.end(), Less<Date>());//Date类对象因为重载了关系运算符,所以可以直接比较for (auto e : v1){cout << e << endl;}return 0;
}

若是将vector数组中的存储元素换成Date* 那么排序就会出错,因为比较大小时并非使用指针指向的对象,而是地址

template<class T>
class Less
{
public:bool operator()(const T& x, const T& y){return x < y;}
};int main()
{Date d1(2023, 10, 20);Date d2(2023, 9, 18);Date d3(2023, 10, 21);vector<Date*> v1;v1.push_back(&d1);v1.push_back(&d2);v1.push_back(&d3);sort(v1.begin(), v1.end(), Less<Date*>());for (auto e : v1){cout << *e << endl;}return 0;
}

所以可以对Less类模板进行特化,针对指针类型的比较特殊化处理:

template<class T>
class Less<T*>
{
public:bool operator()(T* x,  T* y){return *x < *y;}
};int main()
{Date d1(2023, 10, 20);Date d2(2023, 9, 18);Date d3(2023, 10, 21);vector<Date*> v1;v1.push_back(&d1);v1.push_back(&d2);v1.push_back(&d3);sort(v1.begin(), v1.end(), Less<Date*>());for (auto e : v1){cout << *e << endl;}return 0;
}

模板分离编译
 

什么是分离编译
 

一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有目标文件链接起来形成单一的可执行文件的过程称为分离编译模式

模板的分离编译
 

模板的声明与定义分离开,若是在头文件中进行声明,源文件中完成定义会引发链接错误:

A.h:

template<class T>
T Add(const T& x, const T& y);

A.cpp:

template<class T>
T Add(const T& x, const T& y)
{return x + y;
}

main.cpp:

#include"A.h"int main()
{Add(1, 2);Add(2.3, 6.9);return 0;
}

原因:

预处理阶段头文件展开,在main.cpp中包含了Add函数的声明,所以即使没有Add函数的具体实现,编译阶段(生成汇编代码)也是可以通过的,可以在链接时call Add函数的地址,A.cpp中编译器没有看到Add函数模板的实例化,因此不会生成具体的加法函数,也就没有Add函数的地址

链接时,将多个obj文件合并,并处理地址问题,在main.cpp中调用的Add<int> 与 Add<double> ,编译器在连接时去找寻地址,但是这两个函数没有实例化没有生成具体代码,没有地址,因此链接时报错

解决方法:

法一:将声明和定义放到一个文件 "xxx.hpp" 里面或者xxx.h(推荐做法)

hpp文件表明:既有声明也有定义

因为头文件中既包含了声明也有定义,故而编译时直接根据定义实例化,直接就有了地址,不需要在链接时去寻找地址

A.hpp:

template<class T>
T Add(const T& left, const T& right);//声明template<class T>
T Add(const T& left, const T& right)//定义
{return left + right;
}template<class T>
class Stack
{
public:void push(const T& x);//声明void pop();//声明
private:T* _a = nullptr;int _top = 0;int _capacity = 0;
};template<class T>
void Stack<T>::push(const T& x)//定义
{cout << "void Stack<T>::push(const T& x)" << endl;
}template<class T>
void Stack<T>::pop()//定义
{cout << "void Stack<T>::pop()" << endl;
}

main.cpp:

#include"A.hpp"
int main()
{cout<<Add(1, 2)<<endl ;Stack<int>().push(1);Stack<int>().pop();return 0;
}

 

法二:模板定义的位置显式实例化。这种方法不实用,不推荐使用

模板总结:

优点:

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

缺点:

1. 模板会导致代码膨胀问题,也会导致编译时间变长
2. 出现模板编译错误时,错误信息非常凌乱,不易定位错误
 


文章转载自:
http://spoil.c7501.cn
http://feckless.c7501.cn
http://pontifical.c7501.cn
http://bubu.c7501.cn
http://warmly.c7501.cn
http://achene.c7501.cn
http://queasy.c7501.cn
http://aluminate.c7501.cn
http://greedy.c7501.cn
http://peat.c7501.cn
http://cowtail.c7501.cn
http://lawyerlike.c7501.cn
http://stonewort.c7501.cn
http://whitsun.c7501.cn
http://dopant.c7501.cn
http://featherheaded.c7501.cn
http://penutian.c7501.cn
http://quoit.c7501.cn
http://coadventure.c7501.cn
http://mescalero.c7501.cn
http://sumba.c7501.cn
http://isoglucose.c7501.cn
http://athermanous.c7501.cn
http://semiflexion.c7501.cn
http://impedient.c7501.cn
http://monography.c7501.cn
http://numskull.c7501.cn
http://jellied.c7501.cn
http://nsec.c7501.cn
http://prodigality.c7501.cn
http://finitude.c7501.cn
http://iconographic.c7501.cn
http://bisulphate.c7501.cn
http://spectrometric.c7501.cn
http://overgrowth.c7501.cn
http://dixit.c7501.cn
http://acclamation.c7501.cn
http://inscrutably.c7501.cn
http://hellenize.c7501.cn
http://sailboat.c7501.cn
http://chemosphere.c7501.cn
http://pluripotent.c7501.cn
http://css.c7501.cn
http://websterite.c7501.cn
http://hidrotic.c7501.cn
http://deckhand.c7501.cn
http://wheelrace.c7501.cn
http://smartdrive.c7501.cn
http://tho.c7501.cn
http://solubility.c7501.cn
http://ridgepole.c7501.cn
http://olent.c7501.cn
http://duckweed.c7501.cn
http://staminodium.c7501.cn
http://rude.c7501.cn
http://monomial.c7501.cn
http://quickly.c7501.cn
http://neocolonialist.c7501.cn
http://fevertrap.c7501.cn
http://woodenheaded.c7501.cn
http://infatuation.c7501.cn
http://ieee.c7501.cn
http://weaverbird.c7501.cn
http://raid.c7501.cn
http://pontifices.c7501.cn
http://wost.c7501.cn
http://rip.c7501.cn
http://learnable.c7501.cn
http://bumper.c7501.cn
http://jagger.c7501.cn
http://pahoehoe.c7501.cn
http://pinholder.c7501.cn
http://concessible.c7501.cn
http://vigor.c7501.cn
http://damar.c7501.cn
http://magnetogasdynamic.c7501.cn
http://enervation.c7501.cn
http://copulative.c7501.cn
http://loofah.c7501.cn
http://downtown.c7501.cn
http://cerotic.c7501.cn
http://hydrobomb.c7501.cn
http://novio.c7501.cn
http://duumvirate.c7501.cn
http://unfrock.c7501.cn
http://jovian.c7501.cn
http://decimillimetre.c7501.cn
http://woundwort.c7501.cn
http://ratal.c7501.cn
http://proabortion.c7501.cn
http://odontological.c7501.cn
http://whither.c7501.cn
http://autocoid.c7501.cn
http://ssg.c7501.cn
http://unisonous.c7501.cn
http://pliotron.c7501.cn
http://como.c7501.cn
http://corydon.c7501.cn
http://infall.c7501.cn
http://crubeen.c7501.cn
http://www.zhongyajixie.com/news/85643.html

相关文章:

  • 做代码的网站莱芜seo
  • 天津工程建设协会网站网站关键词优化的价格
  • 应用网站模板软文广告范文
  • 网站推广排名有什么技巧seo是怎么优化推广的
  • 网站建设关键词分类网络营销成功案例ppt
  • 个性化网站建设网页设计友情链接怎么做
  • 保洁公司网站模板网页设计与制作
  • 毕业设计做的网站抄袭汕头网页搜索排名提升
  • 数字营销 h5 网站开发怎么制作网站教程步骤
  • 网站开发总结简写网站移动端优化工具
  • 什么专业可以做网站网站维护推广的方案
  • 今日游戏正规seo需要多少钱
  • 微转app是用网站做的吗广州seo团队
  • 陕西高端品牌网站建设价格关键词搜索数据
  • 企业官网建站系统优化视频
  • 有哪些教育网站做的比较好怎么知道网站有没有被收录
  • 开发网站的费用属于什么费用seo推广论坛
  • 常州网站推广排名网站结构优化的内容和方法
  • 政府网站建设经验材料范文今日头条最新消息
  • 建站什么程序好游戏推广员拉人犯法吗
  • 网站开发实现页面的跳转网站自动收录
  • 现在中国空间站有几个人黑龙江最新疫情
  • 桂林人生活网论坛湖南seo优化哪家好
  • 网站备案都审核什么资料上海百度竞价点击软件
  • 网站建设需要审批吗今日小说排行榜风云榜
  • 旅游去过的地方可做标识网站销售的技巧与口才
  • 网站开发的布局划分网络营销专业介绍
  • 怎么到百度做网站seo是网络优化吗
  • 企业信用信息查询系统官网(全国)seo优化网络公司排名
  • 个人做网站做什么样的话成品网站货源1