Мое решение состояло бы в том, чтобы сделать перечисление минимальным. Это то, что Microsoft сделала для своих перечислений в своих заголовочных файлах DirectX (хороший прием, я должен признать).
Они установили размер перечисления равным int, добавив фиктивное перечисление следующим образом:
typedef enum
{
fooo = 1,
baar = 2,
___Force32Bit = ~0UL
} MyEnum;
Теперь перечисление всегда будет , по крайней мере, размером с int.
Если вы хотите, вы можете взять это поверх ... Этот размер приводит к длинному и длинному перечислению:
typedef enum
{
fooo = 1,
baar = 2,
___Force64Bit = ~0ULL
} MyEnum;
Я знаю, это не супер чистое решение. Я думаю, что такого решения не существует, и соблюдение минимального размера работало для меня до сих пор. Возможно, вам придется скорректировать код, если вы переходите с 32-64-битного кода, но обычно в таких ситуациях вам все равно приходится просматривать некоторые части кода, так что нет большой проблемы.
Кстати - извините за C-код, я знаю, что вопрос был помечен как C ++, но я из C-парней: -)