我有这样的代码
template <class T> class Widget
{
void fun() {}
}
//Okay: specialization of a member function of widget
template <> void Widget<char>:: fun()
{
void fun() {}
}
但是,下面是我被告知的错误。但不明白为什么。
template<class T, class U> class Gadget
{
void fun() {}
}
//Error! cannot partially specialize a member function of Gadget
template<class U> void Gadget<char,U>::fun()
{
..specialized implementation
}
为什么第二个错误?如何更改以使其正确?
谢谢!!!!
最佳答案
仅对一个成员函数进行部分特化是不可能的,而必须对整个类进行部分特化。这就是C++
中的工作方式。
原因是您不能拥有部分专门的功能,而成员功能本身就是功能。通过部分地专用整个类,成员函数将“看起来”像具有较少类型的模板(在该部分专用类中)。
为什么您不能拥有部分专业功能,这是另一个故事,我也没有很好的答案/理解为什么要执行此功能。
关于使其工作,为什么不对部分类进行专门化,然后仅重新定义所需的功能。
关于c++ - 为什么不能在C++模板中部分地专门化成员函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25098758/