c++偏特化简单示例
c++偏特化
?
// temp1.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <iostream>#include <string.h>#include <math.h>using namespace std;template <class T>const T& Max(const T& t1, const T& t2);template<>char* const& Max(char* const& psz1, char* const& psz2);template<class T>class CEqual{static bool IsEqual(const T& lh, const T& rh){return lh == rh;}};template<class T>class Compare{public: static bool IsEqual(const T& lh, const T& rh) { return lh == rh; }};template <>class Compare<float>{public:static bool IsEqual(const float& lh, const float& rh){return fabs(lh - rh) < 10e-6;}};template <>class Compare<double>{static bool IsEqual(const double& lh, const double& rh){return fabs(lh - rh) < 10e-15;}};int main(int agrc, char** argv){cout << Compare<int>::IsEqual(1, 3) << endl;cout << Compare<int>::IsEqual(3, 3) << endl;cout << Compare<float>::IsEqual(1.2222f, 1.22223f) << endl;cout << Compare<float>::IsEqual(1.222222f, 1.2222223f) << endl;cout << Max(5, 10) << endl;cout << Max('a', 'z') << endl;char* psz1 = "hello";char* psz2 = "world";cout << Max(psz1, psz2) << endl;return 0;}//前面两个mymax都能返回正确的结果.而第三个却不能,因为,此时mymax直接比较两个指针p1 和 p2 而不是其指向的内容.//针对这种情况,当mymax函数的参数类型为const char* 时,需要特化。template <class T>const T& Max(const T& t1, const T& t2){return t1 < t2 ? (T&)t2 : (T&)t1;}//偏特化:对于指针类型的时候 公共模板函数 就不好处理了,所以c++引入了偏特化template<>char* const& Max(char* const& psz1, char* const& psz2){return (strcmp(psz1, psz2) < 0) ? (char* &)psz2 : (char* &)psz1;}?