[[NO_UNIQUE_ADDRESS]] и два значения члена одного типаC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 [[NO_UNIQUE_ADDRESS]] и два значения члена одного типа

Сообщение Anonymous »

Я играю с [[no_unique_address]] в c ++ 20 .

В примере в Cppreference мы имеем пустой тип пустого и введите z

Код: Выделить всё

struct Empty {}; // empty class

struct Z {
char c;
[[no_unique_address]] Empty e1, e2;
};
По -видимому, размер z должен быть не менее 2 , потому что типы e1 и e2 одинаковы.

Однако я действительно хочу иметь z с размером 1 . Это заставило меня задуматься, что насчет обертывания пустого в некотором классе обертки с дополнительным параметром шаблона, который обеспечивает соблюдение различных типов E1 и E2 .

Код: Выделить всё

template 
struct Wrapper : public T{};

struct Z1 {
char c;
[[no_unique_address]] Wrapper e1;
[[no_unique_address]] Wrapper e2;
};
< /code>

К сожалению, sizeof (z1) == 2 < /code>. Есть ли хитрость, чтобы сделать размер z1 < /code>, чтобы быть одним?template 
struct Empty{
[[no_unique_address]] T t;
[[no_unique_address]] S s;
};
, который является пустым типом, если t и s также являются пустыми типами и различны! Я хочу, чтобы этот тип был пустым, даже если t и s являются одинаковыми типами.

Подробнее здесь: https://stackoverflow.com/questions/591 ... -same-type
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»