смещение поля в структуре
От: Алекс Россия http://wise-orm.com
Дата: 22.08.02 04:05
Оценка:
Привет всем!
Собственно, сабж. Как определить смещение поля в структуре (можно расширить или обобщить до класса)?
Re: смещение поля в структуре
От: Андрей Россия  
Дата: 22.08.02 04:54
Оценка: 15 (2)
Здравствуйте Алекс, Вы писали:

А>Привет всем!

А>Собственно, сабж. Как определить смещение поля в структуре (можно расширить или обобщить до класса)?

offsetof
Re[2]: смещение поля в структуре
От: Аноним  
Дата: 22.08.02 05:14
Оценка:
Здравствуйте Андрей, Вы писали:

А>Здравствуйте Алекс, Вы писали:


А>>Привет всем!

А>>Собственно, сабж. Как определить смещение поля в структуре (можно расширить или обобщить до класса)?

А>offsetof


#include "stdio.h"
typedef struct
{
int a;
int b;
} ms;
int main(int argc, char* argv[])
{
size_t offset;
ms m;

offset = (char*)&(m.a) — (char*)&(m);
printf("%d\n", offset );

offset = (char*)&(m.b) — (char*)&(m);
printf("%d\n", offset );

return 0;
}

Re[3]: смещение поля в структуре
От: Андрей Тарасевич Беларусь  
Дата: 22.08.02 05:31
Оценка:
Здравствуйте Аноним, Вы писали:


А>>offsetof


А>#include "stdio.h"

А>typedef struct
А>{
А> int a;
А> int b;
А>} ms;
А>int main(int argc, char* argv[])
А>{
А> size_t offset;
А> ms m;

А> offset = (char*)&(m.a) — (char*)&(m);

А> printf("%d\n", offset );

А> offset = (char*)&(m.b) — (char*)&(m);

А> printf("%d\n", offset );
А>
А> return 0;
А>}

Криво. Для этой цели, как уже было сказано, существует 'offsetof' и нечего огород городить.
Best regards,
Андрей Тарасевич
Re[4]: смещение поля в структуре
От: Алекс Россия http://wise-orm.com
Дата: 22.08.02 07:32
Оценка:
Здравствуйте Андрей Тарасевич, Вы писали:

АТ>Здравствуйте Аноним, Вы писали:



[]

АТ>Криво. Для этой цели, как уже было сказано, существует 'offsetof' и нечего огород городить.


Это просто макрос! Неужели нет встроенного средства?

З.Ы. Как делает offsetof я и сам раньше делал!
Re[5]: смещение поля в структуре
От: Андрей Россия  
Дата: 22.08.02 07:54
Оценка:
Здравствуйте Алекс, Вы писали:

skip

А>Это просто макрос! Неужели нет встроенного средства?

А>З.Ы. Как делает offsetof я и сам раньше делал!

Ты просил способ: тебе его указали. А что значит в твоем понимании встроенное средство? И чем тебя offsetof не устраивает? Свое дело он делает и вполне нормально
Re[5]: смещение поля в структуре
От: Андрей Тарасевич Беларусь  
Дата: 22.08.02 16:41
Оценка:
Здравствуйте Алекс, Вы писали:


А>[]


АТ>>Криво. Для этой цели, как уже было сказано, существует 'offsetof' и нечего огород городить.


А>Это просто макрос! Неужели нет встроенного средства?


Более встроенного чем 'offsetof'? Нет. Можно, конечно, вычитать указатели. Но зачем это делать, если есть 'offsetof'?

А>З.Ы. Как делает offsetof я и сам раньше делал!


А как конкретно? Например, в стандартной библиотеке MSVC++ 6 'offsetof' заниматся разыменованием null-указателя. Стандартная библиотека имеет право делать такое в своей реализации. Ты сам в своей программе — нет, т.к. это не является легальным С++.
Best regards,
Андрей Тарасевич
Re[6]: смещение поля в структуре
От: Алекс Россия http://wise-orm.com
Дата: 23.08.02 03:52
Оценка:
Здравствуйте Андрей Тарасевич, Вы писали:

АТ>Здравствуйте Алекс, Вы писали:


[]

АТ>А как конкретно? Например, в стандартной библиотеке MSVC++ 6 'offsetof' заниматся разыменованием null-указателя.


именно так и делал

АТ>Стандартная библиотека имеет право делать такое в своей реализации. Ты сам в своей программе — нет, т.к. это не является легальным С++.


т.е. в легальном С++ нет средства вычисления смещения мемберов структуры/класса?
Re: смещение поля в структуре
От: orangy Россия
Дата: 24.08.02 07:43
Оценка:
Здравствуйте Алекс, Вы писали:

А>Привет всем!

А>Собственно, сабж. Как определить смещение поля в структуре (можно расширить или обобщить до класса)?

Зависит от того, зачем это нужно. Есть же указатели на члены класса, которые type-safe, правильно работают при различного рода наследованиях (например множественное, включая ромбовидные схемы), ссылках и указателях на базовые классы и т.п.
Что конкретно хочет сделать уважаемый джин?
"Develop with pleasure!"
Re: адрес функции-члена класса
От: SVV Беларусь  
Дата: 26.08.02 12:22
Оценка:
Привет всем!
Вопрос из той же серии: как определить адрес функции-члена класса (в том числе и виртуальной)? Лучше конечно в общем случае, т.е. когда объект не создан, но можно и для случая когда объект создан.

И еще, что нужно переделать в

typedef int (CALLBACK * MyCallBack) (HWND, UINT, WPARAM, LPARAM);

чтобы переменную типа MyCallBack компиллятор воспринимал как указатель на функцию-член класса?
Re[2]: адрес функции-члена класса
От: dupamid Россия  
Дата: 26.08.02 12:34
Оценка:
Здравствуйте SVV, Вы писали:

SVV>Привет всем!

SVV>Вопрос из той же серии: как определить адрес функции-члена класса (в том числе и виртуальной)? Лучше конечно в общем случае, т.е. когда объект не создан, но можно и для случая когда объект создан.

SVV>И еще, что нужно переделать в


SVV>
SVV>typedef int (CALLBACK * MyCallBack) (HWND, UINT, WPARAM, LPARAM);
SVV>

SVV>чтобы переменную типа MyCallBack компиллятор воспринимал как указатель на функцию-член класса?

Про указатели на функции члены можешь посмотреть, например http://www.rsdn.ru/forum/message.asp?mid=85834&only
Автор: Алекс
Дата: 16.08.02
.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.