// ConsoleApplication3.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> #include <functional> using namespace std; //1 "方向盘" 类接收外部的操作, 把消息传到 "车" 类中, 车类把消息传入到 "轮子" 类上 //(子类发消息给父类) //2 "方向盘" 类接收外部的操作, 把消息传入到 "轮子" 类上 //(子类发消息给子类) //方向盘类 class Steering { private: function<void(float)> m_steeringAction; public: //设置回调函数 void setWheelConnectWithCar(function<void(float)> steeringAction) { m_steeringAction = steeringAction; } //转动方向盘 void turn(float angle) { cout<<"Steering turn "<<angle<<" angle"<<endl; m_steeringAction(angle); } }; //轮子类 class Wheel { public: //转动轮子方向 void turn(float angle) { cout<<"Wheel turn "<<angle<<" angle"<<endl; } }; //车类 class Car { public: //尽管方向盘在车里, 可是用户能够直接对它进行操作 Steering m_steering; Wheel m_wheel; Car() { setCarConnectWithWheel(); } #if 1//1 "方向盘" 类接收外部的操作, 把消息传到 "车" 类中, 车类把消息传入到 "轮子" 类上 //设置车和方向盘连接的函数 void setCarConnectWithWheel() { std::function<void (float)> _fun = std::bind(&Car::steeringAction,this,std::placeholders::_1); m_steering.setWheelConnectWithCar(_fun); } //当转动方向盘时, 会调用该函数, 然后改函数让轮子转动对应的角度 void steeringAction(float angle) { m_wheel.turn(angle); } #else//2 "方向盘" 类接收外部的操作, 把消息传入到 "轮子" 类上 //设置车和方向盘连接的函数 void setCarConnectWithWheel() { std::function<void (float)> _fun = std::bind(&Wheel::turn,&m_wheel,std::placeholders::_1); m_steering.setWheelConnectWithCar(_fun); } #endif }; int _tmain(int argc, _TCHAR* argv[]) { Car _car; //让方向盘转动30度 _car.m_steering.turn(30); return 0; }
时间: 2024-10-25 06:18:24