c++ - 对数组值的 static_assert

标签 c++ arrays c++11 static-assert

是否可以对数组值进行编译时检查?

例子:

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");

Live demo

关于c++ - 对数组值的 static_assert,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33986365/

相关文章:

c++ - 下面的字符串循环缓冲区实现有哪些可能的改进?

java - 诊断 NaN 的原因

java - Java 字符串与数组匹配时出现问题

c++ - 移动构造函数和强异常保证

c++ - ifstream 在我的代码中不起作用?

c++ - 为什么我不能删除这个数组元素的指针值?

javascript - Array.filter 数字加零

c++ - 一个模板函数,可以接受两个任意类型的列表

c++ - 错误 : passing ‘constas ‘this’ argument discards qualifiers [-fpermissive]

c++ - 使用指向基类的指针访问 protected 继承成员