template<typename T>
class Test
{
public:
Test();
Test(T value);
~Test();
setAge(T ageValue);
T getAge()const;
//用模板的嵌套实现一个仿函数
template<typename T_Value>
bool operator()(T_Value l_value,T_Value r_value)const
{
return l_value<r_value;
}
private:
T age;
};
template<typename T>Test<T>::Test()
{
;
}
template<typename T>Test<T>::Test(T value)
{
setAge(value);
template<typename T>Test<T>::setAge(T ageValue)
{
if(ageValue < 0)
{
value = 0;
}
age = value;
}
template<typename T>T Test<T>::getAge()
{
return age;
}
template<typename T>Test<T>::~Test()
{
}
int main()
{
Test<int>t =Test<int>(10);
cout<<t.getAge()<<endl;
cout<<t(12,3)<<endl;//调用仿函数
return 0;
}
//运行结果
10
0
说明:
类模板的成员函数的实现均在类声明的头文件中实现。可以在类内也可以在类外。在类外实现时要注意模板的嵌套
以上例子中的仿函数如果放在类外实现:
template<typename T>template<typename T_value>
bool Test<int>::operator()(T_value l_value,T_value r_value)const
{
//注意:此种写法在vc6.0下编译失败,请高手指教
//在vs2010下可以编译通过
return l_value < r_value;
}
总结:
C++的类模板的成员函数不能在.cpp中定义,必须在其类声明的.h文件中定义,可以在类外也可以在类内。