为什么Specialized模板类需要前向声明?

时间:2014-04-11 13:48:58

标签: c++ templates

这就是代码:

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模板类需要前向声明?

3 个答案:

答案 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
{
...
};