我们有一个const数组结构,如下所示:
static const SettingsSuT _table [] = {{5,1},{1,2},{1,1}等};
结构有以下几点:
因此,对于单个元素,"总大小"是size_bytes*num_items.所有这些信息都在const数组中,在编译时可用.但请注意,_table的总大小与EEPROM本身的大小无关._table不镜像EEPROM,它只描述我们需要的布局,用法和其他"元数据"类型信息.但是,您可以使用此元数据来确定我们正在使用的EEPROM数量.
该阵列简单地描述了存储在外部EEPROM中的数据,该外部EEPROM具有固定/最大尺寸.随着功能的添加和删除,const数组中的条目会发生变化.我们目前对数据的总大小进行运行时检查,以确保它不超过EEPROM大小.
但是,我们已将许多这些运行时检查更改为static_assert样式模板检查,以便构建立即停止.我不是模板专家,所以可以在这个上使用一些帮助.
所以,问题是:如何创建一个模板来添加所有元素的大小(乘以每个元素的值,然后添加所有结果),然后执行static_assert并在构建超过幻数大小时停止构建的EEPROM.我把典型的递归因子模板示例看作一种方法,但它无法访问数组,它需要一个const值(我认为).
非常感谢你的帮助,