【C++】使用map实现简易回调框架

文章展示了如何在C++中使用map存储键值对来实现回调机制。首先是一个基础示例,键是字符串,值为无参数无返回值的函数。接着,文章进阶到一个类结构,该类支持注册带有参数和返回值的回调函数,并能触发这些回调。
摘要由CSDN通过智能技术生成

一个简单的通过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", &param1);
    cout << "Callback function 1 returned: " << result1 << endl;

    int param2 = 3;
    int result2 = cb_framework.TriggerCallback("func2", &param2);
    cout << "Callback function 2 returned: " << result2 << endl;

    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值