一个简单的通过map键值对实现的回调机智,键为字符串,值为对应的处理函数
#include <iostream>
#include <map>
#include <functional>
void func1() {
std::cout << "Function 1 is called." << std::endl;
}
void func2() {
std::cout << "Function 2 is called." << std::endl;
}
void func3() {
std::cout << "Function 3 is called." << std::endl;
}
int main() {
std::map<std::string, std::function<void()>> func_map{
{"func1", func1},
{"func2", func2},
{"func3", func3}
};
std::string func_name;
std::cout << "Enter function name: ";
std::cin >> func_name;
auto it = func_map.find(func_name);
if (it != func_map.end()) {
it->second();
} else {
std::cout << "Function not found." << std::endl;
}
return 0;
}
进阶版,带参数带返回值框架类
#include <iostream>
#include <map>
#include <string>
using namespace std;
// 回调函数类型
typedef int (*CallbackFunc)(int*);
class CallbackFramework {
public:
// 注册回调函数
void RegisterCallback(string name, CallbackFunc func) {
callbacks_[name] = func;
}
// 触发回调函数
int TriggerCallback(string name, int* param) {
if (callbacks_.find(name) != callbacks_.end()) {
return callbacks_[name](param);
} else {
// 未找到回调函数,可以抛出异常或者返回默认值
throw runtime_error("Callback function not found!");
}
}
private:
map<string, CallbackFunc> callbacks_;
};
// 回调函数1
int CallbackFunc1(int* param) {
cout << "Callback function 1 called with param: " << *param << endl;
return (*param) * 2;
}
// 回调函数2
int CallbackFunc2(int* param) {
cout << "Callback function 2 called with param: " << *param << endl;
return (*param) * (*param);
}
int main() {
// 创建回调函数框架对象
CallbackFramework cb_framework;
// 注册回调函数
cb_framework.RegisterCallback("func1", CallbackFunc1);
cb_framework.RegisterCallback("func2", CallbackFunc2);
// 触发回调函数
int param1 = 5;
int result1 = cb_framework.TriggerCallback("func1", ¶m1);
cout << "Callback function 1 returned: " << result1 << endl;
int param2 = 3;
int result2 = cb_framework.TriggerCallback("func2", ¶m2);
cout << "Callback function 2 returned: " << result2 << endl;
return 0;
}