我有一个多次派生的基类 B:D1、D2 等。
在类 B 中,我希望有一个静态方法 getInfo() ,它返回一个 BaseInfo 类(基本上是一个包含类 B 的默认成员值的类),因此将其设为静态是有意义的,因为不需要具体实例。
现在,有没有办法强制派生类实现这个方法? 显然每个派生类都有自己的类成员默认值。
理想情况下,如果在基类中我可以将 getInfo() 声明为虚拟静态,那就太好了,但由于 C++ 中没有这样的东西,我想知道是否有一个很好的方法来实现这种行为。
我正在考虑 CRTP,但没有想出解决方案。
最佳答案
使用特征模式。
template<typename T> struct base_traits;
您期望的每一个类 getInfo
from 必须专门化这种类型。
template<>
struct base_traits<B>
{
static BaseInfo getInfo() { return b_info; }
};
template<>
struct base_traits<D1>
{
static BaseInfo getInfo() { return d1_info; }
};
template<>
struct base_traits<D2>
{
static BaseInfo getInfo() { return d2_info; }
};
获取BaseInfo
对于任何特定的类,您可以编写
BaseInfo d1info = base_traits<D1>::getInfo();
如果有人忘记专门化base_traits<T>
其派生类型 T
,您会收到编译器错误。
BaseInfo d3info = base_traits<D3>::getInfo();
error: incomplete type ‘base_traits<D3>’ used in nested name specifier
关于c++ - C++中有没有办法让派生类重写基类静态方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43962948/