gpt4 book ai didi

c++ - c++ 中有没有一种方法可以让派生类覆盖基类静态方法?

转载 作者:行者123 更新时间:2023-11-27 23:54:03 25 4
gpt4 key购买 nike

我有一个多次派生的基类 B:D1、D2 等。

在类 B 中,我希望有一个静态方法 getInfo() 返回一个 BaseInfo 类(基本上是一个包含类 B 的默认成员值的类),因此将其设为静态是有意义的,因为不需要具体实例。

现在,有没有办法强制派生类实现这个方法?显然每个派生类都有自己的类成员默认值。

理想情况下,如果在基类中我可以将 getInfo() 声明为 virtual static 会很棒,但由于在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com