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

时间:2015-04-28 16:11:10

标签: c++ templates

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

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

然后我将在我的派生类中重写。但是,由于模板不能是虚拟的,我不知道在这种情况下我会怎么做。

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

是否有不同的方法要求子类指定成员函数模板?

1 个答案:

答案 0 :(得分:1)

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

通过删除基类中的函数,您可以使代码稍微自我记录,并可能获得更好的诊断:

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

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