仅对模板中的某些类型覆盖功能

G-s*_*G-s 4 c++ templates overriding

我有一个带有虚函数的基类:

class Base
{
public:
  virtual void Function();
};

void Base::Function()
{
  cout << "default version" << endl;
}
Run Code Online (Sandbox Code Playgroud)

和派生的模板类:

template <class T> class Derived : public Base
{
public:
  virtual void Function();
};
Run Code Online (Sandbox Code Playgroud)

Function()除了某些选定类型之外,是否有办法从所有类型的基类中提取出来?所以,我想是能够定义一个重写Function(),比如说,intlong

void Derived<int>::Function()
{
  cout << "overriden version 1" << endl;
}

void Derived<long>::Function()
{
  cout << "overriden version 2" << endl;
}
Run Code Online (Sandbox Code Playgroud)

并具有Function()所有其他类型的默认版本,而没有Function()为它们明确定义,因此输出为

int main ()
{
  Derived<int> derivedInt;
  derivedInt.Function();

  Derived<long> derivedLong;
  derivedLong.Function();

  Derived<double> derivedDouble;
  derivedDouble.Function();
}
Run Code Online (Sandbox Code Playgroud)

将会

overriden version 1
overriden version 2
default version
Run Code Online (Sandbox Code Playgroud)

可能吗?

Ker*_* SB 5

实际上,类模板的成员函数是函数模板,因此您可以对其进行专门化:

template <typename T> class Foo
{
    void Function();
};

template <typename T> void Foo::Function() { /* ... */ }

template <> void Foo<int>::Function() { /* ... */ }
Run Code Online (Sandbox Code Playgroud)


Mat*_* M. 4

是的,通过专业化Derived

  • 编写没有它的通用版本(它将继承它Base
  • 专门Derived覆盖

简单的方案,但是有效。