class Consumer {
public:
virtual void consume(int data) = 0;
};
class A {
public:
A(Consumer& consumer) : consumer_(consumer) {}
void process(int data) { consumer_.consume(data); }
private:
Consumer& consumer_;
};
class B : public Consumer {
public:
B() {}
void consume(int data) { /* consume data */ }
};
int main() {
B* b_ = new B();
A a_ = A(*b_);
a_.process(5);
return 0;
}
ICAgIGNsYXNzIENvbnN1bWVyIHsKICAgIHB1YmxpYzoKICAgICAgICB2aXJ0dWFsIHZvaWQgY29uc3VtZShpbnQgZGF0YSkgPSAwOwogICAgfTsKCiAgICBjbGFzcyBBIHsKICAgIHB1YmxpYzoKICAgICAgICBBKENvbnN1bWVyJiBjb25zdW1lcikgOiBjb25zdW1lcl8oY29uc3VtZXIpIHt9CiAgICAgICAgdm9pZCBwcm9jZXNzKGludCBkYXRhKSB7IGNvbnN1bWVyXy5jb25zdW1lKGRhdGEpOyB9CiAgICBwcml2YXRlOgogICAgICAgIENvbnN1bWVyJiBjb25zdW1lcl87CiAgICB9OwoKICAgIGNsYXNzIEIgOiBwdWJsaWMgQ29uc3VtZXIgewogICAgcHVibGljOgogICAgICAgIEIoKSB7fQogICAgICAgIHZvaWQgY29uc3VtZShpbnQgZGF0YSkgeyAvKiBjb25zdW1lIGRhdGEgKi8gfQogICAgfTsKCiAgIGludCBtYWluKCkgewogICAgICAgQiogYl8gPSBuZXcgQigpOwogICAgICAgQSBhXyA9IEEoKmJfKTsKICAgICAgIGFfLnByb2Nlc3MoNSk7CiAgICAgICByZXR1cm4gMDsKICAgfQo=