文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C++发布订阅者模式:实现简单消息传递系统

2024-11-29 20:46

关注

概述:这个C++示例演示了发布者-订阅者模式的基本实现。通过 `Event` 类,发布者 `Publisher` 发送数据,而订阅者 `Subscriber` 订阅并处理数据。通过简单的回调机制,实现了组件间松散耦合的消息传递。

好的,我将为你提供一个简单的C++实例,演示如何使用发布者-订阅者模式。在这个例子中,我们将使用C++11的标准库中的  头文件,以及线程支持。

首先,我们定义一个简单的事件类,该事件类将用于携带消息:

// Event.h
#pragma once

#include 

template 
class Event {
public:
    using Callback = std::function;

    void subscribe(Callback callback) {
        callbacks_.emplace_back(std::move(callback));
    }

    void notify(Args... args) const {
        for (const auto& callback : callbacks_) {
            callback(args...);
        }
    }

private:
    std::vector callbacks_;
};

接下来,我们定义一个发布者类,它将包含一个事件对象,并提供一个方法来触发该事件:

// Publisher.h
#pragma once

#include "Event.h"

class Publisher {
public:
    Event onDataReceived;

    void sendData(int data) {
        // 假设在这里进行一些数据处理
        onDataReceived.notify(data);
    }
};

然后,我们定义一个订阅者类,它将订阅发布者的事件并定义处理函数:

// Subscriber.h
#pragma once

#include "Event.h"
#include 

class Subscriber {
public:
    void processData(int data) {
        std::cout << "Received data: " << data << std::endl;
    }
};

最后,我们将创建一个主函数来演示发布者和订阅者的使用:

// main.cpp
#include "Publisher.h"
#include "Subscriber.h"
#include 

int main() {
    Publisher publisher;
    Subscriber subscriber;

    // 订阅者订阅发布者的事件
    publisher.onDataReceived.subscribe([&subscriber](int data) {
        subscriber.processData(data);
    });

    // 模拟数据发送
    for (int i = 1; i <= 5; ++i) {
        publisher.sendData(i);
        std::this_thread::sleep_for(std::chrono::seconds(1));
    }

    return 0;
}

在这个例子中,我们创建了一个简单的发布者 Publisher 类,它包含一个 Event 对象,该对象具有整数参数类型。订阅者 Subscriber 类定义了一个处理函数 processData,该函数将在收到数据时被调用。在主函数中,我们创建了发布者和订阅者的实例,并通过调用 onDataReceived.subscribe 将订阅者订阅到发布者的事件。然后,我们通过调用 sendData 模拟发布者发送数据,订阅者的处理函数将被调用。

这只是一个简单的示例,实际应用中可能需要更复杂的实现,以处理多个事件和更多的数据类型。

来源:今日头条内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯