【发布时间】:2010-10-05 12:04:34
【问题描述】:
我们有一个 const 结构数组,如下所示:
static const SettingsSuT _table[] = { {5,1}, {1,2}, {1,1} 等 };
结构如下:
- size_bytes:
- num_items:
- 其他“元数据”成员
所以“总大小”是单个元素的 size_bytes*num_items。所有这些信息都在 const 数组中,在编译时可用。但是,请注意,_table 的总大小与 EEPROM 本身的大小无关。 _table 不镜像 EEPROM,它只描述了布局、使用和其他我们需要的“元数据”类型信息。但是,您可以使用此元数据来确定我们正在使用的 EEPROM 的数量。
该数组仅描述了存储在外部 EEPROM 中的数据,该外部 EEPROM 具有固定/最大大小。随着功能的添加和删除, const 数组中的条目会发生变化。我们目前对数据的总大小进行运行时检查,以确保它不超过 EEPROM 大小。
但是,我们已经将其中许多运行时检查更改为 static_assert 样式的模板检查,以便立即停止构建。我不是模板专家,所以可以在这方面使用一些帮助。
所以,问题是:如何创建一个模板来将所有元素的大小相加(将每个元素的值相乘,然后将所有结果相加)然后执行 static_assert 并在它们超过时停止构建EEPROM 的幻数大小。我将典型的递归阶乘模板示例视为一种方法,但它无法访问数组,它需要一个 const 值(我认为)。
非常感谢您的帮助,
【问题讨论】:
标签: c++ templates static-assert