Принимая смещение элемента данных так же просто, как это:++ член данных класса/структура C смещение, постоянное выражение
#define MEMBER_OFFSET(Type, Member) \
((unsigned long)(((char *)&((Type *)0)->Member) - (char *)0));
Я хочу, чтобы это константа времени компиляции (или черты использования типа). Например, чтобы использовать его для реализации решений на основе SFINAE с использованием смещений членов, используйте его статические утверждения и т. Д.
ОБНОВЛЕНИЕ: Вопрос в том, как сделать это выражением времени компиляции. Не работает ли он с типами POD, или есть стандартный макрос в библиотеке C и т. Д.
Конечно, мы должны использовать только этот макрос на типы POD. (Хотя последний бросок должен быть 'ptrdiff_t', а не' unsigned long'. Не говоря уже о том, что 'offsetof' уже существует в''.) –
GManNickG
@ Vlad .... brrrrrr .... и ... вы сказали «так же просто, как« .... urgh ... :-( –
@GMan: Есть трюк, чтобы заставить его работать для не-POD-типов. Я просто хочу, чтобы это было просто. И 'offsetof' в стандартной библиотеке C не поддерживает это. –