要求派生类提供成员函数模板

Require derived class to provide member function template

本文关键字:成员 函数模板 派生      更新时间:2023-10-16

我有一个基类和一堆派生类。我想指定派生类需要提供一个特定的成员函数模板。对于常规函数,我会指定一个纯虚拟函数

class A
{
virtual void f() = 0;
}

然后我会在派生类中覆盖它。然而,由于模板不能是虚拟的,我不知道在这种情况下我该怎么做。

class A
{
template <class T>
virtual void f() = 0; // this is not allowed
}

是否有其他方法要求子类指定成员函数模板?

您可以简单地记录派生类必须具有该模板。该要求将被强制执行,因为如果函数丢失,尝试调用该函数的代码将无法编译。

通过删除基类中的函数,您可以使代码更加自我文档化,并可能获得更好的诊断

// Derived classes must provide this template
template <class T> void f() = delete;

总有一天,概念可能会提供一种更好的方式来指定非虚拟接口;但我们还没有。