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 UseBForSomethingElse( B& b) {
b.value = true ;
}
int main( ) {
X x;
return x.b_ .value ;
}
Y2xhc3MgQSB7CiBwdWJsaWM6CiAgY2xhc3MgQiB7cHVibGljOiBib29sIHZhbHVlO307CiAKICBBKCkgewogICAgICBEb1N0dWZmKGJfKTsKICB9CiAgQiBiXzsKIHByaXZhdGU6CiAgdmlydHVhbCB2b2lkIERvU3R1ZmZJbXBsKEImIGIpID0gMDsKICB2b2lkIERvU3R1ZmYoQiYgYikgeyByZXR1cm4gRG9TdHVmZkltcGwoYik7IH0KfTsKIApjbGFzcyBYIDogcHVibGljIEEgewogIC8vIC4uLgogcHJpdmF0ZToKICB2aXJ0dWFsIHZvaWQgRG9TdHVmZkltcGwoQiYgYik7CiAgdm9pZCBVc2VCRm9yU29tZXRoaW5nRWxzZShCJiBiKTsKfTsKIAp2b2lkIFg6OkRvU3R1ZmZJbXBsKEImIGIpIHsKICAgIFVzZUJGb3JTb21ldGhpbmdFbHNlKGIpOwp9CiAKdm9pZCBVc2VCRm9yU29tZXRoaW5nRWxzZShCJiBiKSB7CiAgICBiLnZhbHVlID0gdHJ1ZTsKfQogCmludCBtYWluKCl7CiAgICBYIHg7CiAgICByZXR1cm4geC5iXy52YWx1ZTsKfQ==