是否可以对数组值进行编译时检查?
例子:
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
是否存在?
最佳答案
也许是这样的:
constexpr sDummyStruct array[]=
{
{dummy0, 3},
{dummy1, 5},
{dummy2, 6}
};
constexpr bool checkArray(int index) {
return (index >= sizeof(array)/sizeof(array[0])) ||
(array[index].name == index && checkArray(index + 1));
}
static_assert(checkArray(0), "bad array");
关于c++ - 对数组值的 static_assert,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33986365/