C ++中有没有办法让派生类重写基类静态方法
is there a way in c++ to have derived classes override a base class static method?
我有一个多次派生的基类B:D1,D2等。
在类 B 中,我希望有一个静态方法 getInfo(( 返回一个 BaseInfo 类(基本上是一个包含类 B 的默认成员值的类(,因此将其设置为静态是有意义的,因为不需要特定的实例。
现在,有没有办法强制派生类实现此方法?显然,每个派生类都有自己的类成员默认值。
理想情况下,如果在基类中我可以将 getInfo(( 声明为虚拟静态,那就太好了,但由于C++中没有这样的事情,我想知道是否有一种很好的方法来实现这种行为。
我正在考虑CRTP,但没有提出解决方案。
使用特征模式。
template<typename T> struct base_traits;
您希望从中getInfo
的每个类都必须专门针对此类型。
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();
如果有人忘记为派生类型T
专门化base_traits<T>
,则会出现编译器错误。
BaseInfo d3info = base_traits<D3>::getInfo();
error: incomplete type ‘base_traits<D3>’ used in nested name specifier
事实上,在特定将其设置为静态是有意义的,因为不需要特定的实例。
情况下是有需要的。具体而言,需要存储在实例中的运行时类型信息。唯一可能的选择是使函数成为虚拟函数,并在派生类中重写它。
相关文章:
- 在 C++ 中用派生类型重写成员函数
- 派生类调用父类的方法,该方法调用重写的虚拟方法调用错误的方法
- 重写派生类中的二元运算符
- 具有派生参数的函数重写
- 我无法重写基类的方法,因为我的派生类是模板化的
- 派生类中的私有重写虚函数
- 哪个基类调用派生重写的方法?
- 不要重写派生类中的纯虚函数
- 基类能否知道派生类是否已重写虚拟方法
- 是否有可能有一个派生类继承最终函数但创建相同的函数(而不是重写)
- Qt/C++ - 从派生类调用重写方法
- 重写派生类中的枚举值
- 使派生类使用重写运算符
- C ++中有没有办法让派生类重写基类静态方法
- 重写派生类中的模板基方法?
- 在派生类中重写哪个基类的虚拟析构函数
- 在多级继承中重写,中间派生类未覆盖函数
- 有没有一种技术可以使虚函数在所有派生类中强制重写?
- 在继承时用指向派生类的指针重写指向基类的指针
- 是否可以在不重写派生类中记录虚拟成员?