【问题标题】:Is there a way to get a derived class' type in a base class' function?有没有办法在基类函数中获取派生类的类型?
【发布时间】:2021-01-12 23:25:15
【问题描述】:

我正在寻找一种在基类中的函数中使用派生类类型的方法,类似于模板化函数。

class Base
{
    T foo() const
    {
        return T(*this);
    }
}

class Derived : public Base
{
}

这与我想使用它的目的相似,因此我不必在每个派生类中将 foo 重写为纯虚函数。目标是找到一种方法让 foo 中的 T 成为派生类的类型。例如,在 Derived 类型的对象上调用 foo 应该调用看起来像这样的 foo 版本 这个:

Derived foo() const
{
    return Derived(*this);
}

我知道这可能不是你能做的,但谁能证实?

【问题讨论】:

    标签: c++ function types abstract-class


    【解决方案1】:

    是的,您可以将Base 设为模板,并在从它继承时使用Derived 对其进行实例化。这被称为奇怪重复模板模式 (CRTP):

    template<typename T>
    class Base
    {
      public:
        T foo() const
        {
            return T(*this);
        }
    };
    
    class Derived : public Base<Derived>
    {
    };
    

    这是demo

    【讨论】:

    • 谢谢!这将节省相当多不必要的重新定义
    猜你喜欢
    • 1970-01-01
    • 2018-04-26
    • 1970-01-01
    • 2011-07-06
    • 2015-03-30
    • 2019-08-31
    • 1970-01-01
    • 2021-07-24
    • 2015-10-24
    相关资源
    最近更新 更多