C/C++回调函数实现与std::function和std::bind介绍

时间:2025-04-03 07:58:31
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; }