c++ 函数当参数传参,类函数当参数传参,匿名函数当参数传参,function<void()>

末蓝、 2023-01-07 07:21 320阅读 0赞

函数传参

一.在URDriver类中调用其它类中的匿名函数 使用function接收(通过传函数的方式)

1.1 定义一个类URDriver,类中定义一个接收函数的成员 function connectCallBack;

1.2 定义一个函数 setConnectCallBack 接收外部传进来的函数设置到自己类的成员connectCallBack上;

形参格式:function connectCallBack

1.3 定义一个函数runConnectCallBac执行传进来的函数

当URDriver类对象执行自己的runConnectCallBack函数后对应传进来的匿名函数就会执行

  1. class URDriver {
  2. private:
  3. //用成员接收传进来的函数
  4. function<void()> connectCallBack;
  5. public:
  6. //把传进来的函数赋值给成员 function<void()> connectCallBack
  7. void setConnectCallBack(function<void()> connectCallBack) {
  8. this->connectCallBack = connectCallBack;
  9. }
  10. //调用传进来的函数
  11. void runConnectCallBack() {
  12. this.connectCallBack();
  13. }
  14. }

1.4.把其他类中的匿名函数传入URDriver类中

定义一个函数 setCallBack() 调用URDriver类对象中的 setConnectCallBack函数把匿名函数传入URDriver类成员中

实参格式: [this]{ cout<<”hello word!”<<endl; }

  1. //创建URDriver 对象
  2. URDriver urdsriver;
  3. //使用:在另一个类方法中调用上面的URDriver 对象传再入匿名函数[this]{}作为URDriver类中成员function<void()> connectCallBack的参数
  4. void MainWindow::setCallBack() {
  5. //传入匿名函数
  6. urdsriver.setConnectCallBack([this]{
  7. //打印输出hello word
  8. cout<<"hello word!"<<endl;
  9. });

二.在自己类中调用其它类中的函数(通过传函数的方式)

2.1定义一个类PLC_service ,类中定义4个无参函数

  1. #ifndef JIUWU_INNERROOM_IIMTROBOT_PLC_SERVICE_H
  2. #define JIUWU_INNERROOM_IIMTROBOT_PLC_SERVICE_H
  3. #include <IIMTDriver.h>
  4. #include <MoveScript.h>
  5. class PLC_service {
  6. public:
  7. PLC_service();
  8. ~PLC_service();
  9. void robot_pick_up_2_to_tray( );
  10. void robot_pick_up_18_to_tray( );
  11. void robot_pick_up_20_to_tray( );
  12. void robot_pick_up_26_to_tray( );
  13. };
  14. #endif //JIUWU_INNERROOM_IIMTROBOT_PLC_SERVICE_H

2.1 定义函数 excuteNextInstruction_Front_4 传四个PLC_servic类中的无参函数

形参格式:void (PLC_service::*excute_plcService_function )()

  1. class DriverService {
  2. public:
  3. DriverService();
  4. ~DriverService();
  5. PLC_service plcService;
  6. //把他类中的函数当做自己函数的参数
  7. void DriverService::excuteNextInstruction_Front_4(
  8. void (PLC_service::*excute_plcService_function1 )()
  9. ,void (PLC_service::*excute_plcService_function2 )()
  10. ,void (PLC_service::*excute_plcService_function3 )()
  11. ,void (PLC_service::*excute_plcService_function4 )()) {
  12. //执行第1个函数
  13. (plcService.*excute_plcService_function1)();
  14. //执行第2个函数
  15. (plcService.*excute_plcService_function2)();
  16. //执行第3个函数
  17. (plcService.*excute_plcService_function3)();
  18. //执行第4个函数
  19. (plcService.*excute_plcService_function4)();
  20. }
  21. };
  22. };
  23. #endif //JIUWU_INNERROOM_IIMTROBOT_PLC_SERVICE_H

2.3【调用函数】 DriverService 类对象中执行excuteNextInstruction_Front_4函数;

实参格式: &PLC_service::robot_pick_up_2_to_tray

  1. //传入PLC_service类中的函数体 实参格式:&PLC_service::robot_pick_up_3_to_tray
  2. excuteNextInstruction_Front_4(
  3. &PLC_service::robot_pick_up_2_to_tray
  4. ,&PLC_service::robot_pick_up_10_to_tray
  5. ,&PLC_service::robot_pick_up_18_to_tray
  6. ,&PLC_service::robot_pick_up_26_to_tray);

发表评论

表情:
评论列表 (有 0 条评论,320人围观)

还没有评论,来说两句吧...

相关阅读