模板函数的专门化可以是虚的吗?

Can specializations of a template function be virtual?

本文关键字:函数 专门化      更新时间:2023-10-16

例如,

class A {
    template<typename T> T DoStuff();
    template<> virtual int DoStuff<int>() = 0;
};

Visual Studio 2010说没有,但我有一种有趣的感觉,我只是把语法搞砸了。成员函数模板的显式完全特化可以是虚拟的吗?

显式特化在类中是不合法的。即使你可以让它部分专门化,你仍然会遇到"模板不能是虚拟的"的问题。

n3290,§14.5.2规定:

成员函数模板不能是虚函数。

并给出了这个例子:

template <class T> struct AA {
  template <class C> virtual void g(C); // error
  virtual void f(); // OK
};

在继续声明成员函数模板也不计算虚覆盖之前,

根据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
};

您可以通过使用常规的非模板虚函数重载函数模板来获得类似的效果。