gpt4 book ai didi

c++ - 如何更改仅 header 类中类的所有实例的行为

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

对于一个只在头文件中定义的类,我需要一个方法的特殊行为,用于该类的所有实例。它应该取决于默认值,可以在运行时随时更改。因为我既不想要工厂类也不想要中央管理类,所以我想到了这个想法:

class MyClass
{
public:
void DoAnything() // Methode which should be act depending on default set.
{
// Do some stuff
if(getDefaultBehaviour())
{
// Do it this way...
}
else
{
// Do it that way...
}
}

static bool getDefaultBehaviour(bool bSetIt=false,bool bDefaultValue=false)
{
static bool bDefault=false;
if(bSetIt)
bDefault=bDefaultValue;
return bDefault;
}
};

可以用,但看起来有点别扭。我想知道是否有更好的方法遵循同样的意图。在我想使用它的情况下,软件已经在启动期间创建了该类的实例,并将它们传递给代码的不同部分。最终,程序获得了如何处理实例的信息(例如,如何或在何处使自己持久化)。这个决定不仅应该影响新创建的实例,它应该影响已经创建的实例。

最佳答案

我建议使用一个简单的方法来模拟一个静态数据成员,这样使用起来会更自然:

class MyClass
{
public:
// get a reference (!) to a static variable
static bool& DefaultBehaviour()
{
static bool b = false;
return b;
}

void DoAnything() // Methode which should be act depending on default set.
{
// Do some stuff
if(DefaultBehaviour())
{
// Do it this way...
}
else
{
// Do it that way...
}
}
};

用户可以随时更改默认值

MyClass::DefaultBehaviour() = true;

关于c++ - 如何更改仅 header 类中类的所有实例的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20976500/

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