C ++ Указатель на член члена

//#define NOT_WORKS
#define HOW(X) 0

struct A {

};

struct B {
A a;
};

struct C {
B b;
};

int main(int argc, char **argv) {
A B::*ba = &B::a;       // ba is a pointer to B::a member
B C::*cb = &C::b;       // cb is a pointer to C::b member

#ifdef NOT_WORKS

{ A C::*ca = &C::b::a; }    // error: Symbol a could not be resolved / error: ‘C::b’ is not a class or namespace
{ A C::*ca = cb + ba; }     // error: invalid operands of types ‘B C::*’ and ‘A B::*’ to binary ‘operator+’

A C::*ca = HOW(???);        // is possible to reach C::b::a by a member pointer?

#endif

C cptr;
A aptr = cptr.*cb.*ba;  // is pointer inference chaining the only solution?

return 0;
}

Если цепочка вывода указателей на элементы является единственным решением для достижения внутреннего элемента, могу ли я инкапсулировать это в один тип, используя шаблоны?


Теперь код можно скомпилировать с помощью gcc.

Спасибо всем

5

Решение

можно добраться до C :: b :: a по указателю члена?

Вроде, как бы, что-то вроде:

C c;
A B::*ca = &B::a;  //    usage: c.b.*ca;

вывод логики является единственно возможным решением?

да

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]