【问题标题】:Require derived class to provide member function template要求派生类提供成员函数模板
【发布时间】:2015-07-07 14:33:38
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: c++ templates


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢迈克。这不可用的事实是否暗示我可能做出了一些伪劣的设计决定?
    猜你喜欢
    • 2016-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-25
    • 2017-02-10
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多