gpt4 book ai didi

c++ - 如何以多态方式初始化 `static` 成员

转载 作者:行者123 更新时间:2023-11-28 00:31:41 27 4
gpt4 key购买 nike

假设我有基类 Validator

class Validator
{
public:
void validate(const string& str)
{
if( k_valid_keys.find(str) == k_valid_keys.end() )
throw exception();
}
private:
const static std::set<string> k_valid_keys;
};

现在假设我需要扩展类 Validator。每个派生类都有自己的一组有效键。
我的目标是:

  1. 保持 k_valid_keysValidator 的成员。无需将其添加到每个派生类中,尤其是当派生类的类型超过几种时。
  2. 保持k_valid_keys static。假设我有多个 Validator 实例(及其派生类)并且 k_valid_keys 的初始化很昂贵。

如何以多态方式初始化 static 成员?好吧,我知道这是做不到的(如果我错了请更正)。

假设无法完成,有没有更好的设计来解决这个问题?

最佳答案

由于 k_valid_keys 是在 Validator 中声明的 static,所有 Validator 的派生类将共享同一个实例k_valid_keys。就是这样,您将不能在您的程序中同时拥有多个 Validator 子类的实例,否则您的 Validator 子类的不同实例将将元素添加到相同的结构。

也就是说,一个类的静态成员变量只是你整个程序的一个全局变量。

如果您有两个或更多 Validator 子类,但您保证只有一个实例,您只需在子类构造函数上初始化 k_valid_keys

关于c++ - 如何以多态方式初始化 `static` 成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22656978/

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