Информация об изменениях

Сообщение Re: Ключевое слово для доступа к объемлющему классу из вложе от 08.11.2023 23:11

Изменено 08.11.2023 23:12 graniar

Re: Ключевое слово для доступа к объемлющему классу из вложенного
Здравствуйте, x-code, Вы писали:

Я на C делаю так:


#define GetAggregateByMember(Aggregate,MemberName,MemberLink)     ((Aggregate*)(((size_t)(MemberLink))-((size_t)&((Aggregate*)(size_t)0)->MemberName)))


например:


struct B{
    int side;
    B* peer;
};

struct A{
    B b[2];
    A(){
        b[0].side=0;
        b[1].side=1;
    }
};

B* pb;
//...

A* a1 = GetAggregateByMember(A,b[pb->side],pb);
Re: Ключевое слово для доступа к объемлющему классу из вложе
Я на C делаю так:


#define GetAggregateByMember(Aggregate,MemberName,MemberLink) \
    ((Aggregate*)(((size_t)(MemberLink))-((size_t)&((Aggregate*)(size_t)0)->MemberName)))


например:


struct B{
    int side;
    B* peer;
};

struct A{
    B b[2];
    A(){
        b[0].side=0;
        b[1].side=1;
    }
};

B* pb;
//...

A* a1 = GetAggregateByMember(A,b[pb->side],pb);