Hub*_*cat 2 c++ abstract-class types function
我正在寻找一种方法来在基类的函数中使用派生类的类型,类似于模板化函数。
class Base
{
T foo() const
{
return T(*this);
}
}
class Derived : public Base
{
}
Run Code Online (Sandbox Code Playgroud)
这类似于我想用它来做什么,这样我就不必在每个派生类中将 foo 覆盖为纯虚函数。目标是找到一种方法让 foo 中的 T 成为派生类的类型。例如,在 Derived 类型的对象上调用 foo 应该调用如下所示的 foo 版本:
Derived foo() const
{
return Derived(*this);
}
Run Code Online (Sandbox Code Playgroud)
我知道这可能不是你能做的,但有人可以确认吗?
是的,你可以制作Base一个模板,并Derived在继承它时实例化它。这被称为 Curiously Recurring Template Pattern (CRTP):
template<typename T>
class Base
{
public:
T foo() const
{
return T(*this);
}
};
class Derived : public Base<Derived>
{
};
Run Code Online (Sandbox Code Playgroud)
这是一个演示。