Nous avons un tableau const de structures, quelque chose comme ceci:Recherché: une idée de modèle C++ pour attraper un problème, mais au moment de la compilation?
static const SettingsSuT _table [] = {{5,1}, {1,2}, {1,1}, etc};
la structure a les suivantes:
- size_bytes:
- NUM_ITEMS:
- Autres "méta-données" membres
Ainsi, la "taille totale" est size_bytes * num_items pour un élément unique. Toutes ces informations sont dans le tableau const, disponible au moment de la compilation. Mais, veuillez noter que la taille totale de _table n'est pas liée à la taille de l'EEPROM elle-même. La table _table ne reflète pas l'EEPROM, elle décrit seulement la disposition, l'utilisation et d'autres informations de type "méta-données" dont nous avons besoin. Mais, vous pouvez utiliser cette méta-donnée pour déterminer la quantité d'EEPROM que nous utilisons.
Le tableau décrit simplement les données stockées dans une EEPROM externe, qui a une taille fixe/maximale. À mesure que des entités sont ajoutées et supprimées, les entrées de la matrice const changent. Nous avons actuellement un contrôle d'exécution de la taille totale des données pour s'assurer qu'il ne dépasse pas la taille de l'EEPROM.
Toutefois, nous avons modifié plusieurs de ces vérifications d'exécution en vérifications de modèle de style static_assert, de sorte que la génération s'arrête immédiatement. Je ne suis pas un expert en template, je pourrais donc utiliser de l'aide sur celui-ci. Donc, la question: comment créer un modèle pour additionner la taille de tous les éléments (en multipliant les valeurs de chaque élément, puis en ajoutant tous les résultats), puis faire un static_assert et arrêter la construction s'ils dépassent la taille du nombre magique de l'EEPROM. Je regardais l'exemple de modèle factoriel récursif typique comme une approche, mais il ne peut pas accéder au tableau, il nécessite une valeur const (je pense).
merci beaucoup pour toute aide,
Oui, nous avons utilisé l'approche sizeof sur d'autres tables. Mais, je suppose que je n'étais pas 100% clair. Cette table ressemble plus à une table "méta-données". Il décrit l'EEPROM, sa structure et la manière dont chaque élément doit être utilisé. Ce n'est pas une réplique "sizeof" exacte de l'EEPROM. merci –