enum bool
{
FALSE = 0,
TRUE = 1
};
我想知道如何在现代C ++方法中翻译它,以及是否有适合的容器;我知道enum
并不是那么受欢迎,但我无法想到C ++世界中真正的替代品。
如果想将特定方法的执行与状态相关联怎么办?
好的,这是我将更加冗长的部分。
我想强调一个事实,即我在询问结构符号常量,而不是关于TRUE和FALSE,我不是那个“有需要”。
假设我有一个可以用自己的常量表示几个状态的结构
enum semaphore
{
GREEN = 0,
ORANGE = 1,
RED = 2
};
这是C代码,现在我的问题是如果有更好的方法,如何在C ++中做同样的事情。
当我询问是否有可能在发生状态变化时自动触发时,我的问题仍在继续,例如:
int main
{
...
semaphore = 1;
...
}
并且没有任何额外的陈述,这只是因为信号量现在是橙色而触发method()
。
我希望现在更清楚了。
答案 0 :(得分:1)
如果想将特定方法的执行与状态相关联,该怎么办?
我不确定我是否理解你的意思,但也许你的意思是这样的:
<强> DEFINITION 强>
而不是:
enum BOOL
{
FALSE = 0,
TRUE = 1
};
void executeOnlyWithTrue(BOOL b)
{
if (b == TRUE)
{
RunParticularMethodOnlyNeededForTrueState();
}
}
你这样做:
class BOOL
{
public:
virtual void executeOnlyWithTrue() const {/*default does nothing*/}
};
class FALSE : public BOOL
{ //no override, so using default executeOnlyWithTrue (BOOL's)
};
class TRUE : public BOOL
{
public:
virtual void executeOnlyWithTrue() const
{
RunParticularMethodOnlyNeededForTrueState();
}
};
<强> USAGE 强>
而不是:
const BOOL b = TRUE;
...
executeOnlyWithTrue(b)
...
你这样做:
const BOOL& b = TRUE();
b.executeOnlyWithTrue();
答案 1 :(得分:1)
如果semaphore
属于类类型,则赋值:
semaphore = 5;
会自动调用函数semaphore.operator=(int)
(如果存在)。因此,您可以通过实现此功能来监控semaphore
的任何“更改”(它不需要更改任何内容,但这可能会违反最少意外的原则)。