class P { P
public:
P() { _self = 0; }
virtual P* self() {
return _self?_self->self():this;
}
virtual void attach(C* p) {
_self = p;
}
private:
P* _self;
};
class C : public P {
public:
C() : P(this) { }
C* self() { // ANSI/ISO
return _self?_self->self():this;
}
void attach(P* p) { // rejected
p->attach(self());
}
void redirect(C* c) { _self = c; }
private:
C* _self;
};
slide: Subtyping in C++