例如,
之类的东西class A {
template<typename T> T DoStuff();
template<> virtual int DoStuff<int>() = 0;
};
Visual Studio 2010说不,但我觉得很简单,我只是搞砸了语法。成员函数模板的显式完全特化是否可以是虚拟的?
答案 0 :(得分:8)
明确的专业化在一个类中是不合法的。即使你可以使它成为部分专业化,你仍然会遇到“模板不能虚拟”的问题。
n3290,§14.5.2陈述:
成员函数模板不应是虚拟的。
并给出了这个例子:
template <class T> struct AA {
template <class C> virtual void g(C); // error
virtual void f(); // OK
};
在继续说明成员函数模板也不计入虚拟覆盖之前。
答案 1 :(得分:2)
根据C ++ 98标准,成员函数模板不应是虚拟的。 http://www.kuzbass.ru:8086/docs/isocpp/template.html
-3-成员函数模板不应是虚拟的。 [实施例:
template <class T> struct AA { template <class C> virtual void g(C); // error virtual void f(); // OK };
答案 2 :(得分:0)
通过使用常规的非模板虚函数重载函数模板,可以获得类似的效果。