c++ 函数当参数传参,类函数当参数传参,匿名函数当参数传参,function<void()>
函数传参
一.在URDriver类中调用其它类中的匿名函数 使用function接收(通过传函数的方式)
1.1 定义一个类URDriver,类中定义一个接收函数的成员 function
1.2 定义一个函数 setConnectCallBack 接收外部传进来的函数设置到自己类的成员connectCallBack上;
形参格式:function
1.3 定义一个函数runConnectCallBac执行传进来的函数
当URDriver类对象执行自己的runConnectCallBack函数后对应传进来的匿名函数就会执行
class URDriver {
private:
//用成员接收传进来的函数
function<void()> connectCallBack;
public:
//把传进来的函数赋值给成员 function<void()> connectCallBack
void setConnectCallBack(function<void()> connectCallBack) {
this->connectCallBack = connectCallBack;
}
//调用传进来的函数
void runConnectCallBack() {
this.connectCallBack();
}
}
1.4.把其他类中的匿名函数传入URDriver类中
定义一个函数 setCallBack() 调用URDriver类对象中的 setConnectCallBack函数把匿名函数传入URDriver类成员中
实参格式: [this]{ cout<<”hello word!”<<endl; }
//创建URDriver 对象
URDriver urdsriver;
//使用:在另一个类方法中调用上面的URDriver 对象传再入匿名函数[this]{}作为URDriver类中成员function<void()> connectCallBack的参数
void MainWindow::setCallBack() {
//传入匿名函数
urdsriver.setConnectCallBack([this]{
//打印输出hello word
cout<<"hello word!"<<endl;
});
二.在自己类中调用其它类中的函数(通过传函数的方式)
2.1定义一个类PLC_service ,类中定义4个无参函数
#ifndef JIUWU_INNERROOM_IIMTROBOT_PLC_SERVICE_H
#define JIUWU_INNERROOM_IIMTROBOT_PLC_SERVICE_H
#include <IIMTDriver.h>
#include <MoveScript.h>
class PLC_service {
public:
PLC_service();
~PLC_service();
void robot_pick_up_2_to_tray( );
void robot_pick_up_18_to_tray( );
void robot_pick_up_20_to_tray( );
void robot_pick_up_26_to_tray( );
};
#endif //JIUWU_INNERROOM_IIMTROBOT_PLC_SERVICE_H
2.1 定义函数 excuteNextInstruction_Front_4 传四个PLC_servic类中的无参函数
形参格式:void (PLC_service::*excute_plcService_function )()
class DriverService {
public:
DriverService();
~DriverService();
PLC_service plcService;
//把他类中的函数当做自己函数的参数
void DriverService::excuteNextInstruction_Front_4(
void (PLC_service::*excute_plcService_function1 )()
,void (PLC_service::*excute_plcService_function2 )()
,void (PLC_service::*excute_plcService_function3 )()
,void (PLC_service::*excute_plcService_function4 )()) {
//执行第1个函数
(plcService.*excute_plcService_function1)();
//执行第2个函数
(plcService.*excute_plcService_function2)();
//执行第3个函数
(plcService.*excute_plcService_function3)();
//执行第4个函数
(plcService.*excute_plcService_function4)();
}
};
};
#endif //JIUWU_INNERROOM_IIMTROBOT_PLC_SERVICE_H
2.3【调用函数】 DriverService 类对象中执行excuteNextInstruction_Front_4函数;
实参格式: &PLC_service::robot_pick_up_2_to_tray
//传入PLC_service类中的函数体 实参格式:&PLC_service::robot_pick_up_3_to_tray
excuteNextInstruction_Front_4(
&PLC_service::robot_pick_up_2_to_tray
,&PLC_service::robot_pick_up_10_to_tray
,&PLC_service::robot_pick_up_18_to_tray
,&PLC_service::robot_pick_up_26_to_tray);
还没有评论,来说两句吧...