1
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;
   ...
}

并且没有任何额外的语句,这必须触发 amethod()只是因为信号量现在是橙色的。

我希望现在更清楚了。

4

2 回答 2

1

如果想将特定方法的执行与状态相关联怎么办?

我不确定我明白你的意思,但也许你的意思是这样的:

定义

而不是这个:

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();
  }
};

用法

而不是这个:

const BOOL b = TRUE;
...
executeOnlyWithTrue(b)
...

你来做这件事:

const BOOL& b = TRUE();
b.executeOnlyWithTrue();
于 2012-09-04T21:37:05.010 回答
1

如果semaphore是类类型,则分配:

semaphore = 5;

semaphore.operator=(int)如果存在,将自动调用函数。因此,您可以通过实现此功能来监视 的任何“更改” semaphore(它不需要更改任何内容,但这可能违反最小意外原则)。

于 2012-09-04T21:39:32.837 回答