有没有办法在基础 class' 函数中获取派生的 class' 类型?
Is there a way to get a derived class' type in a base class' function?
我正在寻找一种在基础 class 函数中使用派生类型 class 的方法,类似于模板化函数。
class Base
{
T foo() const
{
return T(*this);
}
}
class Derived : public Base
{
}
这与我想要使用它的目的类似,因此我不必在每个派生 class 中将 foo 重写为纯虚函数。目标是找到一种方法使 foo 中的 T 成为派生 class 的类型。例如,在 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。
我正在寻找一种在基础 class 函数中使用派生类型 class 的方法,类似于模板化函数。
class Base
{
T foo() const
{
return T(*this);
}
}
class Derived : public Base
{
}
这与我想要使用它的目的类似,因此我不必在每个派生 class 中将 foo 重写为纯虚函数。目标是找到一种方法使 foo 中的 T 成为派生 class 的类型。例如,在 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。