Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / проблема с выравниванием / 7 сообщений из 7, страница 1 из 1
10.01.2007, 03:59
    #34244357
hеrоmаntоr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с выравниванием
хочу сделать нечто такое:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
#include <iostream>

class one {
	char ch;
	unsigned dest :  21 ;
	unsigned term :  1 ;
};

class two {
	unsigned last :  1 ;
};

class three {
	unsigned llast :  1 ;
	unsigned rlast :  1 ;
};

class final : one, two {
};

class final2 : one, three {
};

int main(int argc, char *argv[]) {
	std::cout << sizeof(final) << std::endl; // expect 4; 12 given
	std::cout << sizeof(final2) << std::endl; // expect 4; 12 given

	return  0 ;
}

из-за выравнивания конечный класс получается слишком жирным, нужно упаковать в 4(8 на крайняк) байта. Можно как-то обойти этот момент или придется пользовать макросы аля

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
#define INJECT_TWO_PROPS() unsigned last :  1 ;
#define INJECT_THREE_PROPS() unsigned llast :  1 ; unsigned rlast :  1 ;

class final {
	char ch;
	unsigned dest :  21 ;
	unsigned term :  1 ;

	INJECT_TWO_PROPS();
};

class final2 {
	char ch;
	unsigned dest :  21 ;
	unsigned term :  1 ;

	INJECT_THREE_PROPS();
};
...
Рейтинг: 0 / 0
10.01.2007, 10:03
    #34244663
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с выравниванием
Попробуй #pragma pack(1)
...
Рейтинг: 0 / 0
10.01.2007, 10:40
    #34244789
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с выравниванием
Не поможет прагма, ой не поможет!
...
Рейтинг: 0 / 0
10.01.2007, 10:50
    #34244837
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с выравниванием
blindedНе поможет прагма, ой не поможет!

Чего так пессимистично? ;) С 8-ми 6 сделала.
...
Рейтинг: 0 / 0
10.01.2007, 11:20
    #34244960
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с выравниванием
все равно до 0 не скостишь, указатель на typeinfo куда-то положить надо
...
Рейтинг: 0 / 0
10.01.2007, 12:06
    #34245133
nikname
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с выравниванием
Заменить class на struct и добавить #pragma pack(1)
...
Рейтинг: 0 / 0
10.01.2007, 20:35
    #34246950
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с выравниванием
ага вот только чем класс от структуры отличается, по мне кроме как защитой по умолчанию так ничем
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / проблема с выравниванием / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]