我有一个基类和一堆派生类。我想指定派生类需要提供特定的成员函数模板。使用常规函数,我会指定一个纯虚函数
class A
{
virtual void f() = 0;
}
然后我将在我的派生类中重写。但是,由于模板不能是虚拟的,我不知道在这种情况下我会怎么做。
class A
{
template <class T>
virtual void f() = 0; // this is not allowed
}
是否有不同的方法要求子类指定成员函数模板?
答案 0 :(得分:1)
您可以简单地记录派生类必须具有该模板。该要求将被强制执行,因为试图调用该函数的代码如果丢失则无法编译。
通过删除基类中的函数,您可以使代码稍微自我记录,并可能获得更好的诊断:
// Derived classes must provide this template
template <class T> void f() = delete;
有一天,概念可能提供了一种指定非虚拟接口的更好方法;但是我们还没有。