是否可以对数组值进行编译时检查?
示例:
typedef enum
{
dummy0 = 0,
dummy1,
dummy2
} eDummyEnum;
typedef struct
{
eDummyEnum name;
int value;
} sDummyStruct;
const sDummyStruct array[]=
{
{dummy0, 3},
{dummy1, 5},
{dummy2, 6}
}
是否有可能在编译时检查array[dummy1].name == dummy1
?
答案 0 :(得分:1)
答案 1 :(得分:0)
我想,这可以提高效率,但我认为以下代码可以正常工作:
template <typename T, int N>
constexpr int size(T(&)[N]) {
return N;
}
template <int I, int J>
struct check_name {
static constexpr bool check() {
return array[I].name != array[J].name
&& check_name<I + 1, J>::check()
&& check_name<I, J - 1>::check();
}
};
template <int I>
struct check_name<I, I> {
static constexpr bool check() { return true; }
};
constexpr bool check_names() {
return check_name<0, size(array) - 1>::check();
}
static_assert(check_names(), "duplicate names");