我正在将一组从C语言中的文件IO函数移植到C++类中。这些函数会读取一个文件头,其中有许多特定条目的位置是通过“魔数”(未命名的常量)来表示。
几年前,一位老程序员教我使用“魔数”本质上是不好的,因此,我从那时起尝试避免在我的移植过程中使用未命名的常量。因此,我想创建某种包含条目位置常量列表的东西。
到目前为止,我已经想出了两个相对安全的解决方案——使用命名空间封装的常量集或命名空间封装的枚举。
我能安全地使用其中任何一个解决方案吗?其中一个解决方案是否有优势?
例如:
选项1
几年前,一位老程序员教我使用“魔数”本质上是不好的,因此,我从那时起尝试避免在我的移植过程中使用未命名的常量。因此,我想创建某种包含条目位置常量列表的东西。
到目前为止,我已经想出了两个相对安全的解决方案——使用命名空间封装的常量集或命名空间封装的枚举。
我能安全地使用其中任何一个解决方案吗?其中一个解决方案是否有优势?
例如:
选项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;
};
选项二
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_<#>_...