前段时间重新学习C++,主要看C++编程思想和C++设计新思维。对模版的使用有了更进一层的了解,特总结如下:
下面列出了模版的常用情况:
//参考:http://www.cnblogs.com/dayouluo/archive/2005/05/14/155092.html
特别注意:类,全局函数,类的成员函数都可以特化,但是只有类可以半特化,全局函数和类的成员函数不可以半特化。

//-------------------------------------------

//1 类的特化和类成员函数的特化

template<typename T>

class Widget1

{

public:

void Fun1()

{

//generic implementation

}

};


template<>

class Widget1<int>

{

public:

void Fun1()

{

}

};

template<>

void Widget1<char>::Fun1()

{

//specialization

}


void main()

{


Widget1<char> w;

w.Fun1();

Widget1<int> w2;

w2.Fun1();

}

//-------------------------------------------

//2 全局函数的特化和重载

template<typename T1, typename T2>

T1 Fun2(T2)

{

}


//下面2个应该是属于重载

template<typename T2>

char Fun2(T2)

{

char c;

return c;

}


template<typename T1>

T1 Fun2(char)

{

}


//全局函数的特化

template<>

char Fun2<char,int>(int)

{

char c;

return c;

}

int main()

{

}

//-------------------------------------------

//3 全局函数不能半特化,以下编译失败

template <typename T1,typename T2> //原型1

void Test(T1,T2)

{

}


template <typename T1>

void Test<T1,T1>(T1,T1)

{

}


template<typename T1, typename T2> //原型2

T1 Fun2(T2)

{

}

//

template<typename T2>

int Fun2<int,T2>(T2)

{

}

template<typename T1>

T1 Fun2<T1,int>(int)

{

}

template<typename T>

T Fun2<T,T>(T)

{

}

int main()

{

}



////-------------------------------------------

////4 类可以特化和半特化,但是特的成员函数像全局函数一样,只能特化,不能半特化,

template<typename T1, typename T2> struct Widget2

{

void Fun2()

{

//generic implementation

}

};


template<typename T2>

struct Widget2<char,T2>

{

void Fun2()

{

}

};


template<typename T2>

struct widget2

{

void Fun2()

{

// class partial specialization

}

};




//the class member funtion can not be partial specialization

//以下的成员函数半特化,编译失败

template<typename T2>

void Widget2<char, T2>::Fun2()

{

//class member function partial specialization

}

int main()

{

}
参考:C++编程思想2
http://www.cnblogs.com/feisky/archive/2009/11/04/1596203.html