指向成员的成员的指针

C++ Pointer to member of member

本文关键字:成员 指针      更新时间:2023-10-16
//#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 编译代码了

谢谢大家

是否可以通过成员指针到达C::b::a ?

:

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

是指针推理链的唯一解决方案?

是的