一个例子:
//类模板中成员函数为模板函数的情况测试
#include <iostream>
using namespace std;
template <typename T> //类模板定义
class A{
T data; //一个数据成员类型参数化为模板形参
public:
A(const T& t):data(t){}
template<typename T2> //类的模板成员函数
void f(T2 x) const ;
//重载的输出运算符函数:也是一个模板函数(因它不是成员函数,故应声明为函数模板)
template<typename T2>
friend ostream& operator <<(ostream&os, const A<T2>& a) ;
};
//重载的输出运算符函数:也是一个模板函数
template<typename T>
ostream& operator <<(ostream&os, const A<T>& a)
{
os<<a.data;
return os;
}
//重载的类模板的模板成员函数
template<typename T> //第一层:类模板的类型模板化
template<typename T2> //第二层:模板成员函数的模板化
void A<T>::f(T2 x) const
{
cout<<"x=" <<x<<endl;
cout<<"data="<<data<<endl;
}
int main(int argc, char const *argv[])
{
A<string> a("Hello");
double x=0.19;
a.f(x);//即 a.f<double>(x);
cout<<a<<endl;
return 0;
}