c++ - 使用递增值初始化全局变量

标签 c++ enums global-variables

在我的一个 C++03 组件中,我正在从枚举转向全局 const int。 enum{ RED=0, GREEN, BLUE }; 更改为 const unsigned int RED = 0, GREEN = 1, BLUE = 2;

问题是对于全局常量变量,您应该显式初始化每个值。前任。具有 100 个值的枚举,很难按顺序保持值。想象一下你想从这个枚举的中间删除一个值,这是一个大困惑(即在删除枚举后更改所有枚举值的值)!

我创建了这个解决方法,但不知道在不同的编译器和目标上是否能保证结果。

#define CREATE_GLOBAL_COUNT(name, val) static unsigned int g_counter_##name = val
#define INC_GLOBAL_COUNT(name) g_counter_##name ++

CREATE_GLOBAL_COUNT(color, 0);

const int RED = INC_GLOBAL_COUNT(color), 
GREEN = INC_GLOBAL_COUNT(color), 
BLUE = INC_GLOBAL_COUNT(color);

编辑: 主要动机是减少头文件之间的依赖性。需要使用枚举的组件应该包含 enum_definition.h 文件。在新的解决方案中,他们只需要外部全局变量并使用它。

最佳答案

您不应该将良好的工作方式更改为更糟糕的工作方式。

枚举的真正问题是什么?甚至 Scott Meyers 也同意“enum hack”是公平的游戏,并且枚举器比 const int 更接近命名文字。 *顺便说一句,这也是对隐式静态的一种破解。

关于c++ - 使用递增值初始化全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17214341/

相关文章:

c++ - 为文件的读写操作实现 File 类

swift - 如何在一行中获取枚举的案例?

javascript - 如何用函数包装 JS 库并将其放入命名空间?

JavaScript - 使用 Webpack 管理全局变量

matlab - 使用Matlab通过全局拟合找出基础数据集的相对贡献?

c++ - 用opencv读取16位tif

c++ - 返回小结构的虚函数 - 返回值与输出参数?

c++ - 项目错误 : Unknown module(s) in QT: bluetooth

C# In() 方法? (像 SQL)

android - 如何在 proguard 中保留 Enum 类型字段?