#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;
}