Структура нулевого размера

Согласно стандарту C ++ (унаследованному от C) пустые структуры, тем не менее, имеют ненулевой размер. Причина этого (жалкое ИМХО) в том, что две разные переменные должны иметь разные адреса. Теперь наследование пустой структуры не всегда «раздувает» объект. Но в некоторых ситуациях это так.

У меня довольно изощренная архитектура классов, включающая яростное шаблонное вуду.В результате финальные классы (экземпляры которых мне нужно создать) могут иметь несколько унаследованных пустых структур. В связи с этим часть из них со временем может быть раздутой. И хуже всего то, что их структура памяти фактически зависит от порядка наследования.

Я бы хотел избавиться от всего этого, если можно.

Есть ли компилятор C ++, который можно настроить для устранения этой потери места за счет нарушения стандарта?

Редактировать:

Я имею в виду следующее:

struct Empty1 {};
struct Empty2 {};

struct NonEmpty {
    int Value;
};

struct MyClass1
    :public NonEmpty
    ,public Empty1
    ,public Empty2
{
};

struct MyClass2
    :public Empty1
    ,public NonEmpty
    ,public Empty2
{
};

struct MyClass3
    :public Empty1
    ,public Empty2
    ,public NonEmpty
{
};

STATIC_ASSERT(sizeof(MyClass1) == 8);
STATIC_ASSERT(sizeof(MyClass2) == 4);
STATIC_ASSERT(sizeof(MyClass3) == 8);

Не только пустые структуры раздувают объект (когда унаследовано более одной такой вещи), но также результат зависит от порядка наследования пустых структур.

15
задан Lightness Races with Monica 3 November 2011 в 10:52
поделиться