#include <iostream>
#include <functional>
using CallbackType = std::function<void()>;
class Car {
public:
void car_run(void);
void car_stop(void);
CallbackType f1;
private:
CallbackType callbackHandler;
};
void Car::car_run(void)
{
std::cout<<"Car running"<<std::endl;
}
void Car::car_stop(void)
{
std::cout<<"Car stopping"<<std::endl;
}
class Boat {
public:
Boat(Car& car_itf);
static void boat_run(void);
static void boat_stop(void);
private:
Car& car_itf_;
};
Boat::Boat(Car& car_itf):car_itf_{car_itf}{
car_itf_.f1 = std::bind(&Boat::boat_run);
}
void Boat::boat_run(void)
{
std::cout<<"Boat running"<<std::endl;
}
void Boat::boat_stop(void)
{
std::cout<<"Boat running"<<std::endl;
}
int main()
{
Car bmw;
Boat ferry(bmw);
bmw.car_run();
bmw.f1();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KCnVzaW5nIENhbGxiYWNrVHlwZSA9IHN0ZDo6ZnVuY3Rpb248dm9pZCgpPjsKCmNsYXNzIENhciB7CiAgcHVibGljOgogICAgdm9pZCBjYXJfcnVuKHZvaWQpOwogICAgdm9pZCBjYXJfc3RvcCh2b2lkKTsKCiAgICBDYWxsYmFja1R5cGUgZjE7Cgpwcml2YXRlOgogIENhbGxiYWNrVHlwZSBjYWxsYmFja0hhbmRsZXI7Cn07Cgp2b2lkIENhcjo6Y2FyX3J1bih2b2lkKQp7CiAgICBzdGQ6OmNvdXQ8PCJDYXIgcnVubmluZyI8PHN0ZDo6ZW5kbDsKfQoKdm9pZCBDYXI6OmNhcl9zdG9wKHZvaWQpCnsKICAgIHN0ZDo6Y291dDw8IkNhciBzdG9wcGluZyI8PHN0ZDo6ZW5kbDsKfQoKY2xhc3MgQm9hdCB7CiAgcHVibGljOgogICAgQm9hdChDYXImIGNhcl9pdGYpOwogICAgc3RhdGljIHZvaWQgYm9hdF9ydW4odm9pZCk7CiAgICBzdGF0aWMgdm9pZCBib2F0X3N0b3Aodm9pZCk7CiBwcml2YXRlOgogICAgQ2FyJiBjYXJfaXRmXzsKfTsKCkJvYXQ6OkJvYXQoQ2FyJiBjYXJfaXRmKTpjYXJfaXRmX3tjYXJfaXRmfXsKICAgIGNhcl9pdGZfLmYxID0gc3RkOjpiaW5kKCZCb2F0Ojpib2F0X3J1bik7Cn0KCnZvaWQgQm9hdDo6Ym9hdF9ydW4odm9pZCkKewogICAgc3RkOjpjb3V0PDwiQm9hdCBydW5uaW5nIjw8c3RkOjplbmRsOwp9Cgp2b2lkIEJvYXQ6OmJvYXRfc3RvcCh2b2lkKQp7CiAgICBzdGQ6OmNvdXQ8PCJCb2F0IHJ1bm5pbmciPDxzdGQ6OmVuZGw7Cn0KCmludCBtYWluKCkKewogICAgQ2FyIGJtdzsKICAgIEJvYXQgZmVycnkoYm13KTsKICAgIGJtdy5jYXJfcnVuKCk7CiAgICBibXcuZjEoKTsKCiAgICByZXR1cm4gMDsKfQ==