Podkładaj strukturę C ++ do potęgi dwóch

Pracuję nad kodem C ++ dla systemu wbudowanego. Interfejs I / O, którego używa kod, wymaga, aby rozmiar każdej wiadomości (w bajtach) był potęgą dwóch. W tej chwili kod robi coś takiego (w kilku miejscach):

#pragma pack(1)
struct Message
{
   struct internal_
   {
      unsigned long member1;
      unsigned long member2;
      unsigned long member3;
      /* more members */
   } internal;
   char pad[64-sizeof(internal_)];
};
#pragma pack()

Próbuję skompilować kod w 64-bitowej Fedorze po raz pierwszy, gdzielong ma 64 bity. W tym przypadku,sizeof(internal_) jest większy niż 64, wyrażenie w rozmiarze tablicy jest niedomiarowe, a kompilator skarży się, że tablica jest zbyt duża.

W idealnej sytuacji chciałbym móc napisać makro, które zajmie rozmiar struktury i oszacuje w czasie kompilacji wymagany rozmiar tablicy dopełnienia, aby zaokrąglić rozmiar struktury do potęgi dwóch.

Spojrzałem naTrochę dziwacznych hacków strona, ale nie wiem, czy któraś z tych technik może być zaimplementowana w makrze do oceny w czasie kompilacji.

Jakieś inne rozwiązania tego problemu? Czy powinienem utrwalić problem i po prostu zmienić magiczną 64 na magiczną 128?

questionAnswers(11)

yourAnswerToTheQuestion