c++模板 红太狼 2022-05-17 03:49 159阅读 0赞 1.类模板及其(全)特化和偏特化 模板特化是通过"给模板中的所有模板参数一个具体的类"的方式来实现的.而模板偏特化则是通过"给模板中的部分模板参数以具体的类,而留下剩余的模板参数仍然使用原来的泛化定义"的方式来实现。 /*类模板的特化*/ template<> class compare<char*,char>{ public: void printType(char* t1,char t2){ cout << "all specialization" << endl; cout << typeid(t1).name() << endl; cout << typeid(t2).name() << endl; cout << "-----------------------" << endl; } }; /*类模板的偏特化*/ template<typename T2> class compare<char*,T2>{ public: void printType(char* t1,T2 t2){ cout << "1st partial specialization" << endl; cout << typeid(t1).name() << endl; cout << typeid(t2).name() << endl; cout << "-----------------------" << endl; } }; template<typename T1> class compare<T1,char*>{ public: void printType(char* t2,T1 t1){ cout << "2nd partial specialization" << endl; cout << typeid(t2).name() << endl; cout << typeid(t1).name() << endl; cout << "-----------------------" << endl; } }; /*类模板及特化测试代码*/ compare<int,double> c1; compare<char*,char> c2; compare<char*,long> c3; compare<double,char*> c4; c1.printType(5,2.3); c2.printType("ab",'a'); c3.printType("ab",12343); c4.printType("ab",238.212); 2.函数模板及特化 /*函数模板*/ template <typename T> T mymax(const T t1, const T t2) { return t1 < t2 ? t2 : t1; } /*函数模板特化*/ template <> const char* mymax(const char* t1,const char* t2) { return (strcmp(t1,t2) < 0) ? t2 : t1; } /**函数模板及特化测试代码*/ int highest = mymax(5,10); char c = mymax('a', 'z'); const char* p1 = "hello"; const char* p2 = "world"; const char* p = mymax(p1,p2); 严格的来说,函数模板并不支持偏特化,但由于可以对函数进行重载,所以可以达到类似于类模板偏特化的效果。 template <class T> void f(T); (a) 根据重载规则,对(a)进行重载 template < class T> void f(T\*); (b) 如果将(a)称为基模板,那么(b)称为对基模板(a)的重载,而非对(a)的偏特化。C++的标准委员会仍在对下一个版本中是否允许函数模板的偏特化进行讨论。 3.成员模板函数及特化 class A { private: int a; public: template<typename T> void show(T t1); //成员模板函数声明 template<> void show<int>(int t1); //成员模板函数特化声明 }; /*成员模板函数定义*/ template<typename T> void A::show(T t1) { cout << "normal member template function" << endl; cout << t1 << endl; } /*成员模板函数特化定义*/ template<> void A::show<int>(int t1) { cout << "member template function specialization" << endl; cout << t1 << endl; } /*成员模板函数及特化测试代码*/ A a; a.show("abd"); a.show(5); 成员模板函数的声明和定义最好都写在头文件中,否则有些编译器可能会报错。
相关 C++ 模板 C++入门系列文章: [C++、STL常用容器][C_STL] [C++、STL – 函数对象、常用算法][C_STL _] 前言: > 学习模板并不是为了写模板,而 冷不防/ 2024年03月25日 12:45/ 0 赞/ 78 阅读
相关 C++模板 C++模板 1. 模板概念 2. 函数模板 2.1 函数模板概念 2.2 函数模板格式 2.3 函数模板的原理 客官°小女子只卖身不卖艺/ 2023年09月28日 12:09/ 0 赞/ 20 阅读
相关 C++模板 1. 为什么要使用模板? 1. 假如设计一个求两参数最大值的函数,在实践中我们可能需要定义四个函数: ![format_png][] 2. 这些函数 怼烎@/ 2023年05月31日 06:56/ 0 赞/ 16 阅读
相关 C++ 模板: 函数模板 文章目录 C++ 模板 函数模板 1. 模板的概念 2. 函数模板 2.1 函数模板语法 2.2 秒速五厘米/ 2022年12月30日 12:55/ 0 赞/ 274 阅读
相关 C++模板 函数模板 函数模板,是可以创建一个通用的函数,可以支持多种形参。 用关键字 `template` 来定义, 在函数模板中,数据的值和类型都被参数化了,发生函数调用时编 你的名字/ 2022年12月23日 00:43/ 0 赞/ 125 阅读
相关 C++模板 C++模板 ①模板是实现代码重用机制的一种工具。就是根据参数类型生成函数和类的机制。它可以分成两类:一是函数模板,二是类模板,他们允许用户构造模板函数,模板类。 也可称通用 谁借莪1个温暖的怀抱¢/ 2022年09月17日 11:20/ 0 赞/ 149 阅读
相关 c++模板 1定义函数模板 include<stdexcept> include <sstream> include <map> using namesp 水深无声/ 2022年08月21日 08:55/ 0 赞/ 167 阅读
相关 C++:模板 http://[blog.csdn.net/pipisorry/article/details/72353250][blog.csdn.net_pipisorry_articl 逃离我推掉我的手/ 2022年06月16日 13:59/ 0 赞/ 198 阅读
相关 c++模板 1.类模板及其(全)特化和偏特化 模板特化是通过"给模板中的所有模板参数一个具体的类"的方式来实现的.而模板偏特化则是通过"给模板中的部分模板参数以具体的类,而留下剩余的模板 红太狼/ 2022年05月17日 03:49/ 0 赞/ 160 阅读
相关 C++模板 文一:[/images/20220319/2dfa5cca396940129714244edcacafad.png][http_www.cnblogs.com_CaiNiaoZ Bertha 。/ 2022年03月19日 13:30/ 0 赞/ 243 阅读
还没有评论,来说两句吧...