class A {
public:
class B {public: bool value;};
A() {
DoStuff(b_);
}
B b_;
private:
virtual void DoStuffImpl(B& b) = 0;
void DoStuff(B& b) { return DoStuffImpl(b); }
};
class X : public A {
// ...
private:
virtual void DoStuffImpl(B& b);
void UseBForSomethingElse(B& b);
};
void X::DoStuffImpl(B& b) {
UseBForSomethingElse(b);
}
void X::UseBForSomethingElse(B& b) {
b.value = true;
}
int main(){
X x;
return x.b_.value;
}
Y2xhc3MgQSB7CiBwdWJsaWM6CiAgY2xhc3MgQiB7cHVibGljOiBib29sIHZhbHVlO307CgogIEEoKSB7CiAgICAgIERvU3R1ZmYoYl8pOwogIH0KICBCIGJfOwogcHJpdmF0ZToKICB2aXJ0dWFsIHZvaWQgRG9TdHVmZkltcGwoQiYgYikgPSAwOwogIHZvaWQgRG9TdHVmZihCJiBiKSB7IHJldHVybiBEb1N0dWZmSW1wbChiKTsgfQp9OwoKY2xhc3MgWCA6IHB1YmxpYyBBIHsKICAvLyAuLi4KIHByaXZhdGU6CiAgdmlydHVhbCB2b2lkIERvU3R1ZmZJbXBsKEImIGIpOwogIHZvaWQgVXNlQkZvclNvbWV0aGluZ0Vsc2UoQiYgYik7Cn07Cgp2b2lkIFg6OkRvU3R1ZmZJbXBsKEImIGIpIHsKICAgIFVzZUJGb3JTb21ldGhpbmdFbHNlKGIpOwp9Cgp2b2lkIFg6OlVzZUJGb3JTb21ldGhpbmdFbHNlKEImIGIpIHsKICAgIGIudmFsdWUgPSB0cnVlOwp9CgppbnQgbWFpbigpewogICAgWCB4OwogICAgcmV0dXJuIHguYl8udmFsdWU7Cn0=