我正在编写将文件 io 函数集从 c 移植到 c++ 类中。“幻数”(未命名的常数)比比皆是。
这些函数读取一个文件头,该文件头具有许多特定条目,其位置当前由幻数表示。
几年前,一位资深程序员告诉我,使用“幻数”本质上是邪恶的,因此,我一直试图避免在我的端口中使用未命名的常量。所以我想创建某种存储条目的常量列表。
到目前为止,我已经提出了两个看起来相对安全的解决方案——使用命名空间封闭的常量集或命名空间封闭的枚举。
我可以安全地使用这两种解决方案吗?一个比另一个有什么优势吗?
例如
选项 1
namespace hdr_pos {
const unsigned int item_1_pos=4;
const unsigned int item_2_pos=8;
const unsigned int item_3_pos=12;
const unsigned int item_4_pos=24;
const unsigned int item_5_pos=32;
};
选项 2
namespace hdr_pos {
enum e {
item_1_pos=4,
item_2_pos=8,
item_3_pos=12,
item_4_pos=24,
item_5_pos=32
};
};
有没有办法防止重复,如果我由于将来更新文件头而改变位置,但忘记改变其中一个?
请保持事实性和非主观性。如果没有您知道的优势,请随时回答。
注意:当然,在我的实际实现中,我会使用更具描述性的名称;我只是将事物称为 item_<#>_... 以举例说明...