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

这篇具有很好参考价值的文章主要介绍了C++发布订阅者模式:实现简单消息传递系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

 

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

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

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

// Event.h
#pragma once

#include <functional>

template <typename... Args>
class Event {
public:
    using Callback = std::function<void(Args...)>;

    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<Callback> callbacks_;
};

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

// Publisher.h
#pragma once

#include "Event.h"

class Publisher {
public:
    Event<int> onDataReceived;

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

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

// Subscriber.h
#pragma once

#include "Event.h"
#include <iostream>

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

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

// main.cpp
#include "Publisher.h"
#include "Subscriber.h"
#include <thread>

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 模拟发布者发送数据,订阅者的处理函数将被调用。

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

 

C++发布订阅者模式:实现简单消息传递系统文章来源地址https://www.toymoban.com/news/detail-840741.html

到了这里,关于C++发布订阅者模式:实现简单消息传递系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 推荐一个拥有386万订阅者,10000多免费学习视频的频道

    自从开始搞YouTube中文配音以来,我们一直是7*24小时,夜以继日的在批量处理一些优质的学习资源,一方面是翻译,另一方面是配音。这样用户在打开的时候,就能获得经过我们优化的翻译和配音了。 这次我们刚刚处理完一个油管上非常火爆的​IT类学习频道: Edureka 。 该频

    2024年02月08日
    浏览(36)
  • Redis的发布订阅模式:实现消息队列和实时数据推送的利器

    当涉及到实时数据推送和消息队列时,Redis的发布订阅模式是一种非常有用的工具。Redis是一个开源的内存数据库,被广泛用于缓存、队列和实时数据处理等方面。 在本博客中,我们将重点介绍Redis的发布订阅模式,并且提供一些示例代码来帮助读者更好地理解这个模式以及如

    2024年02月12日
    浏览(92)
  • JavaScript 简单实现观察者模式和发布-订阅模式

    大家好,我是南木元元,热衷分享有趣实用的文章。今天来聊聊设计模式中常用的观察者模式和发布-订阅模式。 观察者模式定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知。 如何理解这句话呢?来举个生活中的例子

    2024年02月12日
    浏览(106)
  • Redis消息传递:发布订阅模式详解

    目录 1.Redis发布订阅简介 2.发布/订阅使用    2.1 基于频道(Channel)的发布/订阅    2.2 基于模式(pattern)的发布/订阅 3.深入理解Redis的订阅发布机制    3.1 基于频道(Channel)的发布/订阅如何实现的?    3.2 基于模式(Pattern)的发布/订阅如何实现的?    3.3 SpringBoot结合Redis发布

    2024年02月12日
    浏览(45)
  • C# 简单模拟 程序内部 消息订阅发布功能

    我想做个简单的消息发布订阅功能,但是发现好像没有现成的工具类。要么就是Mqtt这种消息订阅发布。但是我只想程序内部进行消息订阅发布,进行程序的解耦。那没办法了,只能自己上了 在Utils 的MessageHelper 这里我用了元祖来进行临时变量的传值。元祖如何使用请看我的另

    2024年02月14日
    浏览(33)
  • C++之观察者模式(发布-订阅)

    目录 模式简介 介绍 优点 缺点 代码实现 场景说明 实现代码 运行结果 观察者模式( Observer Pattern ) ,也叫我们熟知的 发布-订阅模式。 它是一种 行为型模式。 介绍 观察者模式主要关注的是对象的一对多的关系, 也就是多个对象依赖于一个对象,当该对象的 状态发生改变

    2024年02月15日
    浏览(46)
  • Redis实现消息的发布和订阅

    4.1 发送消息 4.2 接收消息

    2024年02月13日
    浏览(42)
  • 【Python】Flask + MQTT 实现消息订阅发布

    本次项目主要使用到的库: flask_mqtt 1.创建Flask项目 2创建py文件: mqtt_demo.py 3.代码实现 4.项目运行 运行项目前可在Pycharm中设置 host 和 port 设置好后直接运行项目 使用 MQTTX 进行消息测试 1、测试消息接收 创建连接 Host :为代码中定义好的 broker.emqx.io Port :为代码中定义好的

    2024年02月04日
    浏览(48)
  • 第二十九章 使用消息订阅发布实现组件通信

    PubSubJS库介绍 如果你想在 React 中使用第三方库来实现 Pub/Sub 机制, PubSubJS 是一个不错的选择。它是一个轻量级的库,可以在浏览器和 Node.js 环境中使用。 PubSubJS 提供了一个简单的 API ,可以让你在应用程序中订阅和发布消息。你可以使用 npm 来安装它: 1-引入使用 2-首先订阅

    2024年02月02日
    浏览(80)
  • vue消息订阅与发布,实现任意组件间通讯

    第一步:下载第三方消息订阅与发布库,例如常用的pubsub.js,他可以在任何框架中使用包括vue、react、anglar等等。 命令:npm i pubsub-js 注意是pubsub-js(不是点); 第二步:引入库; import pubsub from \\\'pubsub-js\\\' 第三步:订阅消息; 第四部:接收消息;  总结:

    2024年02月13日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包