这就是代码:
template<typename,int> class Uoo; //without this will result in complie error,why?
template<typename T>
class Uoo<T,1>
{
};
int main(){
return 0;
}
为什么Specialized模板类需要前向声明?
答案 0 :(得分:1)
以下代码是模板的特化。
template<typename T>
class Uoo<T,1>
{
};
但你还没有说过非专业化的形式,语言要求你这样做。所以你需要添加原型:
template<typename,int> class Uoo;
您实际上并不需要声明非专业化表单,因为从不需要它的实例。原型就足够了。
答案 1 :(得分:0)
这实际上并不是你正在制作的前瞻声明。你正在做的是首先定义模板化类的“模式”,然后然后你要定义它的特定上下文或版本。更好的问题是,如果没有具有非专业案例,那么第二个模板参数的重点是什么?
答案 2 :(得分:0)
正如声明的那样,template<typename T> class Uoo<T,1>
是template<typename,int> class Uoo
的部分特化;它将int参数修复为1.它不能是不存在的模板的部分特化。
您可以通过编写
使您的“真实”课程模板自给自足template<typename T>
class Uoo
{
...
};