/*
功能:C++模板的显式具体化练习。
常规模板:add加法模板,采用显式具体化模板方式,具体化一个复数相加的add函数。
总结:显式具体化是针对常规模板进行的,因此必须与常规模板的定义格式相符合。如下程序所示,除Any类型可以用一个具体化的C++类型
替换外,其它应该保持与常规模板一致,否则可能不能进行编译
编译环境:Visual Studio 2008
*/
#include <iostream>
//声明常规函数模板原型
template <typename Any>
Any add(const Any &a,const Any &b);
//定义表示复数的结构
struct complex
{
double real; //实部
double imaginary; //虚部
};
//声明显示具体化函数原型
template <> complex add(const complex &,const complex &);
using namespace std;
int main(void)
{
complex sc1 = {23.11,12.33};
complex sc2 = {24.61,15.39};
complex addSc = add(sc1,sc2);
cout << "(sc1 + sc2) .real = " << addSc.real ;
cout << ", (sc1 + sc2) .imaginary = " << addSc.imaginary << endl; ;
return 0;
}
template <typename Any>
Any add(const Any a,const Any b)
{
return a + b;
}
template <> complex add(const complex &ca,const complex &cb)
{
static complex sComplex;
sComplex.real = ca.real + cb.real;
sComplex.imaginary = ca.imaginary + cb.imaginary;
return sComplex;
}