繁体   English   中英

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

[英]why Specialized template class need forward declaration?

这是代码:

template<typename,int> class Uoo;  //without this will result in complie error,why?

template<typename T>
class Uoo<T,1>
{
};

int main(){
    return 0;
}

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

以下代码是模板的特殊化

template<typename T>
class Uoo<T,1>
{
};

但是您还没有说出非专业化的形式,这种语言要求您这样做。 因此,您需要添加原型:

template<typename,int> class Uoo;

实际上,您实际上不需要声明非专业形式,因为从不需要它的实例。 因此,原型就足够了。

这实际上不是您要进行的前向声明。 您要做的是先定义模板化类的“模式”, 然后定义一个专门的上下文或版本。 更好的问题是,如果您没有非专业的案例,那么第二个模板参数的意义是什么?

如所声明的, template<typename T> class Uoo<T,1>template<typename,int> class Uoo的部分专业化; 它将int参数固定为1。它不能是不存在的模板的部分专业化。

您可以通过编写使“真实”类模板自给自足

template<typename T>
class Uoo
{
...
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM