C++ 泛型和特化
泛型 (Generics)泛型编程通过模板实现它允许我们编写可以处理多种数据类型的代码而不需要为每种类型重写代码例子函数模板示例#includeiostream#includestringusingnamespacestd;// 泛型函数模板 - 可以比较任何可比较的类型templatetypenameTTgetMax(T a,T b){return(ab)?a:b;}intmain(){// 使用泛型函数比较整数intintMaxgetMax(10,25);coutMax integer: intMaxendl;// 使用泛型函数比较浮点数doubledoubleMaxgetMax(3.14,2.71);coutMax double: doubleMaxendl;// 使用泛型函数比较字符串string strMaxgetMax(string(apple),string(banana));coutMax string: strMaxendl;return0;}类模板#includeiostreamusingnamespacestd;// 泛型类模板 - 可以存储任何类型的值templatetypenameTclassContainer{private:T value;public:Container(T val):value(val){}TgetValue(){returnvalue;}voidsetValue(T val){valueval;}voiddisplay(){coutValue: valueendl;}};intmain(){// 使用泛型类存储整数ContainerintintContainer(42);intContainer.display();// 使用泛型类存储字符串ContainerstringstrContainer(Hello, Templates!);strContainer.display();// 使用泛型类存储浮点数ContainerdoubledoubleContainer(3.14159);doubleContainer.display();return0;}特化(Specialization)特化允许我们为模板的特定类型提供定制实现当通用模板不能满足某些类型的特殊需求时非常有用例子函数模板#includeiostream#includecstringusingnamespacestd;// 通用模板函数templatetypenameTvoidprintTypeInfo(T value){coutGeneric type: value (size: sizeof(T) bytes)endl;}// 特化版本 - 针对const char*类型templatevoidprintTypeInfoconstchar*(constchar*value){coutC-string: value (length: strlen(value) characters)endl;}// 特化版本 - 针对double类型templatevoidprintTypeInfodouble(doublevalue){coutDouble precision: value (size: sizeof(double) bytes)endl;}intmain(){inti42;doubled3.14159;constchar*strHello, Specialization!;printTypeInfo(i);// 使用通用模板printTypeInfo(d);// 使用double特化printTypeInfo(str);// 使用const char*特化return0;}类模板#includeiostream#includevectorusingnamespacestd;// 通用类模板templatetypenameTclassDataProcessor{public:voidprocess(T data){coutProcessing generic data: dataendl;}};// 特化版本 - 针对vectorint类型templateclassDataProcessorvectorint{public:voidprocess(vectorintdata){coutProcessing vector of integers (size: data.size()):endl;for(intval:data){coutval ;}coutendl;}};// 特化版本 - 针对const char*类型templateclassDataProcessorconstchar*{public:voidprocess(constchar*data){coutProcessing C-string: dataendl;coutString length: strlen(data) charactersendl;}};intmain(){DataProcessorintintProcessor;intProcessor.process(42);DataProcessorconstchar*strProcessor;strProcessor.process(Hello, World!);DataProcessorvectorintvecProcessor;vecProcessor.process({1,2,3,4,5});return0;}总结泛型: 通过模板实现允许编写与类型无关的通用代码提高代码复用性特化: 为特定类型提供定制实现处理通用模板无法满足的特殊情况