Я понимаю, что это старый вопрос, но он может помочь любому, кто ищет простой способ синхронизации нескольких массивов / перечислений.
В моем случае я просто хотел проверить во время компиляции, чтобы определить, не синхронизированы ли мои списки, и поскольку оператор sizeof не обрабатывается до тех пор, пока после препроцессор сделает свое дело, это было Самый простой способ сделать это.
В каком-то заголовочном файле ...
enum ColorType
{
Red=0,
Blue,
Green,
ColorType_Max
};
В том же заголовке или в каком-то другом файле, возможно ...
char const* ColorTypeNames[]=
{
"Red",
"Blue",
"Green"
};
В файле cpp где-то ...
const int s_ColorTypeCount = (int)ColorType_Max;
const int s_ColorNameCount = (int)(sizeof(ColorTypeNames)/sizeof(char const*));
const int s_ColorErrorA = 1/(s_ColorTypeCount/s_ColorNameCount);
const int s_ColorErrorB = 1/(s_ColorNameCount/s_ColorTypeCount);
Только при совпадении двух размеров s_ColorErrorA и s_ColorErrorB будут равны 1. Поскольку переменные являются константами, это приведет к ошибке деления времени компиляции на ноль, когда две переменные подсчета различаются.