5
//#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;
}
如果成员指针的推理链是到达内部成员的唯一解决方案,我可以使用模板将它封装在单一类型中吗?C++指向成员的指针
现在代码可以使用GCC编译
通过成员指针谢谢大家
此代码看起来很奇怪,我无法编译。 究竟是什么意思 A B :: * ba = &B::a; 你确定这是正确的吗? 我看到如下代码: A a; B b; b.a = a; 与指针相同的东西,但从未与“::” – 2013-05-08 10:55:48
@AdrianMaire:'AB :: * ba = &B::a;'声明'ba'是指向'A'类型'B'成员的指针,并初始化它与'&B :: a'。它应该编译好。 – 2013-05-08 11:07:16
@Charles贝利:谢谢你,我会更多地了解这一点。 – 2013-05-08 11:34:37