C++模板:类与函数实战指南
类模板类模板允许定义通用的类其中某些类型可以作为参数。这样的类可以处理不同类型的数据而不需要为每个数据类型编写单独的类。// 定义一个通用的类模板templatetypenameTclassMyTemplate{private:T data;public:MyTemplate(T d):data(d){}TgetData(){returndata;}};intmain(){// 使用类模板创建对象MyTemplateintintObject(5);MyTemplatestd::stringstringObject(Hello);// 调用类模板中的函数std::coutintObject.getData()std::endl;// 输出 5std::coutstringObject.getData()std::endl;// 输出 Helloreturn0;}函数模板函数模板允许编写通用的函数可以处理多种不同类型的数据。templatetypenameTTadd(T a,T b){returnab;}intmain(){intresult1add(5,10);doubleresult2add(3.5,2.7);std::coutResult 1: result1std::endl;// 输出 15std::coutResult 2: result2std::endl;// 输出 6.2return0;}模板特化模板特化允许针对特定的数据类型或模板参数提供定制化的实现分为完全特化和部分特化。完全特化完全特化是对模板中的所有模板参数都进行特化的情况。templatetypenameTTmaximum(T a,T b){return(ab)?a:b;}// 完全特化针对 const char* 类型templateconstchar*maximumconstchar*(constchar*a,constchar*b){return(strcmp(a,b)0)?a:b;}部分特化部分特化是对模板的部分参数进行特化的情况仅适用于类模板。templatetypenameT1,typenameT2classMyPair{public:T1 first;T2 second;};// 部分特化当 T1 和 T2 为相同类型时templatetypenameTclassMyPairT,T{public:T first;T second;};