英文网站建设大概多少钱,wordpress提示ftp,做淘宝客如何引出图片到网站,公司建品牌网站好模板#xff0c;按建筑学的说法是#xff1a;施工时浇筑混凝土用的成组模型板#xff1b;而模板之词#xff0c;恐怕可释之为模型之板#xff0c;顾名思义#xff0c;模板为一套规定好了规范准则的样板。既然为样板#xff0c;自然是可被多方使用#xff1b;而准则既已… 模板按建筑学的说法是施工时浇筑混凝土用的成组模型板而模板之词恐怕可释之为模型之板顾名思义模板为一套规定好了规范准则的样板。既然为样板自然是可被多方使用而准则既已定好那么限制亦是必然存在呢。程序界中的模板原义也应取于此。模板所用之样板根据模板的不同可为实现了一定算法的函数也可为规定好了内部数据结构和操作的类而所施加之限制则为合乎模板定义的类型参数。至于模板定义的类型参数不外乎数目相同、操作完备呢。 模板按其使用可归结为两大类函数模板和类模板。函数模板和普通函数相比可谓异曲同工。普通函数也算得上是一种模板只是施加于普通函数上的限制严格于函数模板而已。普通函数实现了基本的算法调用函数时需提供相同数目相同类型的实参来代替形参。而模板函数除了要求参数的数目相同外将形参的类型作了放大因而其使用范围也随之变大。模板函数的实参类型只需要具有形参类型所必须的操作即可。 下面的例子定义了三个函数 1//max.h 2#include iostream 3template typename T 4inline T const max(T const a,T const b){ 5 std::cout你调用的是两个参数的模板函数std::endl; 6 return ab?a:b; 7} 8 9template typename T1,typename T210inline T1 const max(T1 const a,T2 constb){11 std::cout你调用的是两个参数的模板函数且参数类型不同std::endl;12 return ab?a:b;13}1415inline int const max(int const a,int const b){16 std::cout你调用的是两个参数的普通函数std::endl;17 return ab?a:b;18}1920template typename T21inline T const max(T const a, T const b ,T const c){22 std::cout你调用的是三个参数的模板函数std::endl;23 T d;24 dab?a:b;25 return dc?d:c;26}27 其中第一和第三个函数都为模板函数而第二个函数为普通函数。下面的代码使用这些函数 1#include iostream 2#include string 3#include max.h 4 5int main(){ 6 int i42; 7 std::coutmax(7,i) is ::max(7,i)std::endl; 8 9 double f13.45;10 double f2-9.34;11 std::coutmax(f1,f2) is::max(f1,f2)std::endl;12 13 //下面的两行代码是正确的前者明确指明参数的类型后者通过类型转换都使得代码能正确运行。14 std::coutmax(f1,i) is::maxdouble(f1,i)std::endl;15 std::coutmax(f1,i) is::max(f1,static_castdouble(i))std::endl;1617 std::coutmax(f1,f2,f3)::max(12.0,13.0,11.5)std::endl;18 std::coutmax(char,int)::max(a,12)std::endl;19 std::coutmax(f1,i) is::max(f1,i)std::endl;20 std::coutmax(int,int)::maxdouble(12,34)std::endl;21 std::cini;22} 通过上面的代码的运行结果我们可以发现第14行的代码调用的都是普通函数版本的max函数而第18、19行的代码调用的是两个参数类型不同的模板函数。 上面的代码说明了模板函数的定义、模板函数的重载和使用等方面的问题比较有意思的是模板函数的重载。和普通函数一样模板函数也能重载可以为模板函数定义参数数目不同的重载函数也可以定义数目相同但参数类型不同的重载函数而普通函数我们也可以当作是指定了具体类型的模板函数来处理。经过这样的处理我们可以看出模板函数的重载和普通函数的重载方式大同小异。 说完了模板函数的重载我们再谈谈重载模板函数的使用使用模板函数时采用最符合原则进行调用这也是为什么第14行的代码调用的是普通函数而1819行的代码调用的是两个参数类型不同的模板函数的原因。如果我们将第1819行代码调用的模板函数去掉那么代码仍然可以运行其调用的将是普通函数因为char和float都可以转换为int最符合的函数原型是普通函数。 说完了函数模板该谈谈模板类了可惜肚子开始呱呱叫了只好下回分解呢。 我们继续前面的话题。模板函数还是十分简单的模板类则复杂的多。同模板函数一样也能对模板类实施重载。当然对类而言使用重载似乎不是那么合适了因而我们使用专门的词来称呼专门化Specialization。而这种specialization同模板函数重载一样可以是完全specialization也可是部分specializationpartial specialization其实我们完全可以沿用前面处理函数的观点将普通类完全specialization的类当作是一种特殊的模板类那样无论是何种specialization事实上都是模板类只是类型参数的限制不同而已。如果进行这样的统一以后对于重载模板类的定义、使用就同模板函数完全一致了这里就不再多费口舌了。 模板类有一个模板函数不具有的特性默认参数类型。模板类的类型参数设定时可以给出默认类型使用的时候如果对于该参数不给出实参类型将使用默认类型代替形参类型这同函数中的默认参数值是一样的不过模板函数是不允许这样做的。转载于:https://www.cnblogs.com/lotusswan/archive/2005/09/01/227727.html