下头例子中c++类的模板特化与成员函数的特化//有什么区别
下面例子中c++类的模板特化与成员函数的特化//有什么区别?
------解决方案--------------------
int main(int argc,char*argv[])
{
D<int>d1(10,20);
cout<<d1.compare()<<endl;
D<double>d2(0.1,0.2);
cout<<d2.compare()<<endl;
D<string>d3("good","better");
cout<<d3.compare()<<endl;
char sz1[]="courage";
char sz2[]="excellent";
D<char*>d4(sz1,sz2);//比较的是两个字符指针
cout<<d4.compare()<<endl;
return 0;
}
#include<iostream>
#include<cstring>
#include<typeinfo>
using namespace std;
template<class T>class D
{
public:
D(T x,T y):m_x(x),m_y(y){}
int compare(void)
{
cout<<"Type of m_x is "<<typeid(m_x).name()<<endl;
cout<<"Type of m_y is "<<typeid(m_y).name()<<endl;
if(m_x<m_y)
return -1;
if(m_x>m_y)
return 1;
return 0;
}
private:
T m_x;
T m_y;
};
//类的模板特化
/*template<>class D<char*>
{
public:
D(char*x,char*y):m_x(x),m_y(y){}
int compare(void)
{
cout<<"***Type of m_x is***"<<typeid(m_x).name()<<endl;
cout<<"****Type of m_y is***"<<typeid(m_y).name()<<endl;
if(strcmp(m_x,m_y)>0)
return 1;
if(strcmp(m_x,m_y)<0)
return -1;
return 0;
}
private:
char* m_x;
char* m_y;
};*/
//成员函数的特化
template<>
int D<char*>::compare(void)
{
cout<<"***Type of m_x is***"<<typeid(m_x).name()<<endl;
cout<<"****Type of m_y is***"<<typeid(m_y).name()<<endl;
if(strcmp(m_x,m_y)>0)
return 1;
if(strcmp(m_x,m_y)<0)
return -1;
return 0;
}
int main(int argc,char*argv[])
{
D<int>d1(10,20);
cout<<d1.compare()<<endl;
D<double>d2(0.1,0.2);
cout<<d2.compare()<<endl;
D<string>d3("good","better");
cout<<d3.compare()<<endl;
char sz1[]="courage";
char sz2[]="excellent";
D<char*>d4(sz1,sz2);//比较的是两个字符指针
cout<<d4.compare()<<endl;
return 0;
}
------解决方案--------------------
int main(int argc,char*argv[])
{
D<int>d1(10,20);
cout<<d1.compare()<<endl;
D<double>d2(0.1,0.2);
cout<<d2.compare()<<endl;
D<string>d3("good","better");
cout<<d3.compare()<<endl;
char sz1[]="courage";
char sz2[]="excellent";
D<char*>d4(sz1,sz2);//比较的是两个字符指针
cout<<d4.compare()<<endl;
return 0;
}