什么是包含符号常数的结构的现代C++方法
What is a modern C++ approach to structures containing symbolic constants?
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
的任何"更改"(它不需要更改任何内容,但这可能违反最小意外原则(。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 通过方法访问结构
- 最小硬币更换问题(自上而下方法)
- C++为构建时间获取QDateTime的可靠方法
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 有什么方法可以遍历结构吗
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 使用std::函数映射对象方法
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- C++从另一个类访问公共静态向量的正确方法是什么
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 没有为自己的结构调用列表推回方法
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 在类定义之后定义一个私有方法
- 枚举环境变量的惯用C++14/C++17方法
- 初始化具有非默认构造函数的std::数组项的更好方法