c++ - 有没有办法在基类的函数中获取派生类的类型?

标签 c++ function types abstract-class

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

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

class Derived : public Base
{
}

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

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

我知道这可能不是您能做的事情,但有人可以确认吗?

最佳答案

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

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

class Derived : public Base<Derived>
{
};

这是一个demo .

关于c++ - 有没有办法在基类的函数中获取派生类的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64084217/

相关文章:

javascript - Onclick 函数在加载事件监听器内时不会被调用

c++ - sqlite:检查读写器锁

c++ - 现代 C++ 游戏编程示例

c++ - 如何将 nmake 用于 C++ 项目

haskell - Haskell 中嵌入的无类型 lambda 演算的基数

c++ - 如何在 C++ 中将指针表示的二维数组转换回二维数组?

python - 方法的日志装饰器

c++ - -lrt 选项的目的是什么?

Javascript函数推送问题

c - 二元一次方程不能正常工作