函數傳參
一.在URDriver類中調用其它類中的匿名函數 使用function<void()>接收(通過傳函數的方式)
1.1 定義一個類URDriver,類中定義一個接收函數的成員 function<void()> connectCallBack;
1.2 定義一個函數 setConnectCallBack 接收外部傳進來的函數設定到自己類的成員connectCallBack上;
形參格式:function<void()> connectCallBack
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);