Re[19]: offsetof() без UB
От: kov_serg Россия  
Дата: 27.03.25 13:04
Оценка:
Здравствуйте, rg45, Вы писали:


R>Какие именно слова вызыают затруднения с пониманием?

те что из букв

_>>В c++ нет единообразия везде костыли и подпорки, поэтому имеем то что имеем.

R>И это закономерный итог — имеете то, что имеете.
Да
#include <iostream>

struct A { int a; };
struct B : virtual A { int b; };
struct C : virtual A { int c; };
struct D : B,C { int d; };

template<class T> T* get_instance() { static T t[1]; return t; }
template<class T,auto m> size_t offset() {
    T *t=get_instance<T>(); return (char*)&(t->*m)-(char*)t;
}

int main(int argc,char **argv) {
    std::cout<< "b:" << offset<D,&D::b>() << std::endl;
    std::cout<< "c:" << offset<D,&D::c>() << std::endl;
    std::cout<< "d:" << offset<D,&D::d>() << std::endl;
    std::cout<< "a:" << offset<D,&D::a>() << std::endl;
    return 0;
}

b:8
c:24
d:28
a:32
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.