报错
在定义一个模板类后,在类中声明一个模板函数,在类外特化定义这一个模板函数,会出现这一报错:
//模板类
template<class T>
class A
{
public:
//模板函数的声明
template<class T2>
void print(T2 d1);
};
//模板函数的实现
template<class T>
template<>
void A<T>::print<int>(int d1)//特化为int
{
cout << "print int" << endl;
}
原因分析:
未实例化的模板类不能特化其中的模板函数
假如其承一级一级的关系
template<class T1>
template<class T2>
template<class T3>
void A::B::test();
其中A为B的上一级,B为函数test的上一级,则只有在上一级进行特化(实例化)之后,下一级才可以进行特化
比如我们可以将代码修改一下
//模板类
template<class T>
class A
{
public:
//模板函数的声明
template<class T2>
void print(T2 d1);
};
//模板函数的实现
//将类也特化为int(或者特化也其他也行)
template<>
template<>
void A<int>::print<int>(int d1)//特化为int
{
cout << "print int" << endl;
}
在将上一级实例化(特化)以后,便不会再报错