Re[2]: расмоложение мемберов класса в памяти
От: Seigram  
Дата: 13.06.10 20:07
Оценка:
Здравствуйте, szag, Вы писали:

S>в общем пока придумал вот такую конструкцию

S>
S>template<class T, std::size_t val = sizeof(T)>
S>struct MyAlign
S>{
S>    enum
S>    {
S>        Result = ((val / 8) * 8 == val) ? 0 : (((val / 8) + 1) * 8) - val
S>    };
S>};
S>

S>это работает, но как-то это не по-казачьи. Может кто-то предложет что-то получше?

1. 'offsetof' корректно(гарантированно) работает для POD
2. почему не использовать указатели(враперы для указателей) на члены класса для обращения к таковым?
т.к. Ваша реализация(вычисления) вероятно сильно будет зависить от реализации/настроек компилятора,
и/или не учитывает #pragma pack's, а у Вас не видно использований 'alignof'(MSVC '__alignof'). И т.п.
Если считать( ) то более корректно с учетом ниже сказанного.
2.a) заменить "8" на что-то типо:
struct someStruct {};
int opt=alignof(someStruct); // get compiler option 'alignment'
2.b) учесть выравнивание самого класса(влияние #pragma pack's)
3.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.