什么是包含符号常量的结构的现代C ++方法?

时间:2012-09-04 21:14:55

标签: c++ data-structures

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

我希望现在更清楚了。

2 个答案:

答案 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的任何“更改”(它不需要更改任何内容,但这可能会违反最少意外的原则)。