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

What is a modern C++ approach to structures containing symbolic constants?

本文关键字:C++ 方法 结构 什么 包含 符号 常数      更新时间:2023-10-16
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(),因为信号灯现在是橙色的。

我希望现在这一点更加清楚。

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

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

定义

取而代之的是:

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

如果semaphore是类类型,则作业:

semaphore = 5;

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