C/C++回调函数实现与std::function和std::bind介绍
class MyWarn {
public:
void startWarning(int tempera) {
printf("温度值为: %d 已超阈值,告警 ...\n", tempera);
}
};
#include <iostream>
#include <string>
#include <vector>
#include <stdlib.h>
#include <time.h>
#include <functional>
class myPersion {
public:
myPersion(): mCode(1001), mName("Jack") {
}
void setCode(int code) {
std::cout << "code: " << code << std::endl;
mCode = code;
}
private:
int mCode;
std::string mName;
};
typedef void(*pCb)(int);
void optFunc(int data, pCb cb) {
printf("optFunc ...\n");
if (data % 2 == 0) {
cb(data);
}
}
void optFunc2(int data, std::function<void(int)> op) {
printf("optFunc2 ...\n");
if (data % 2 == 0) {
op(data);
}
}
void onHandle(int data) {
printf("onHandle ...\n");
}
int main() {
{
srand(time(NULL)); // 初始化随机数生成器
int radNum = rand() % 100;
printf("radNum: %d\n", radNum);
optFunc(radNum, onHandle);
myPersion mp;
//optFunc(1001, &mp.setCode);
}
{
srand(time(NULL)); // 初始化随机数生成器
int radNum = rand() % 100;
printf("radNum: %d\n", radNum);
optFunc2(radNum, onHandle);
optFunc2(radNum, [](int x) {
printf("lam ...\n");
});
myPersion mp;
std::function<void(int)> fc = std::bind(&myPersion::setCode, &mp, std::placeholders::_1);
optFunc2(10010, fc);
}
system("pause");
return 0;
}