我的问题如下。我有大量用作标识符的静态常量整数。出于这个原因,我想知道是否可以在编译时检查是否有多个具有相同值的常量(某种静态断言......)。
我不想使用枚举,因为这些常量是在不同的模块中定义的,我不想让所有的枚举都像一个很长的枚举(其中一些彼此不相关)。
这里有一个基本示例:
// module: foo.h
const uint32_t ELEMENT_TYPE_FOO_X = 46;
const uint32_t ELEMENT_TYPE_FOO_Y = 51;
...
// module: boo.h
const uint32_t ELEMENT_TYPE_BOO_C = 21;
const uint32_t ELEMENT_TYPE_BOO_D = 51;
错误:ELEMENT_TYPE_FOO_Y 和 ELEMENT_TYPE_BOO_D 具有相同的值。
我根本不是专家,我想到的唯一检测此错误的是模板专业化。
template<uint32_t N>
struct element_traits {
};
template<ELEMENT_TYPE_FOO_X> {
enum { value = ELEMENT_TYPE_FOO };
};
但这似乎是一个复杂的解决方案。我不知道是否有更优雅/更好的解决方案。到目前为止我还没有找到任何东西。
提前致谢。