如何更改仅标头类中类的所有实例的行为
How to change a behavior for all instances of a class in a header only class
对于仅在标头中定义的类,我需要为该类的所有实例使用一个方法的特殊行为。它应该取决于默认值,该值可以在运行时随时更改。由于我不想要工厂类或中央管理类,因此我想出了这个想法:
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++ 初学者使用。正如我告诉他们总是使用getter和setter方法一样,Frey描述的方法对初学者来说看起来非常复杂("呃,我可以给函数一个值?!?!")。所以我把课写成如下:
class MyClass
{
public:
// get a reference (!) to a static variable
static bool& getDefaultBehaviour()
{
static bool b = false;
return b;
}
static void setDefaultBehaviour(bool value)
{
getDefaultBehaviour()=value;
}
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...
}
}
};
对于用户来说,我现在看起来像一个普通的getter和setter。
相关文章:
- 从C++实例化QML
- 传递一个可能更改为类实例的可调用函数
- 为什么我不能更改实例化对象内部的向量?
- 返回实例变量的c++方法可以访问变量中的数据,但不能更改它,但在编译时不会生成错误
- 类的私有成员在我的类实例化期间更改,即使他们不应该
- 更改函数中类实例的值
- C++ 实例地址更改
- 通过从类 B 访问类 A 实例来更改该实例的属性
- 如何更改仅标头类中类的所有实例的行为
- 为什么 OBJ 的私有值可以通过类实例更改
- C++类实例化是否可以在运行时更改其大小
- 如何更改模板实例化顺序
- 如何将类的实例更改为子类的实例
- 如何更改模板实例化的外观,如std::函数中所示
- 直接从另一个类实例化时的成员整数会更改
- 为什么我不能在复制构造函数中更改实例的私有数据,如果它是 const 的?
- C++正在更改实例变量
- C++-如何创建具有更改名称的类的实例
- 强制c++类实例在复制或赋值时更改成员值
- 从子类实例访问和更改父值