首页 > 编程语言 >简单的c++实现消息发布/订阅机制例子(成员函数被其他类掉调用的例子)

简单的c++实现消息发布/订阅机制例子(成员函数被其他类掉调用的例子)

时间:2024-10-09 10:00:48浏览次数:8  
标签:std 订阅 函数 Publisher 示例 c++ Subscriber 例子 类掉

以下是一个简单的使用 C++ 实现发布 / 订阅机制的示例代码。这个示例包含一个简单的事件系统,其中有发布者(Publisher)和订阅者(Subscriber)。

以下代码需要C++11以上支持

#include <iostream>
#include <vector>
#include <functional>

// 事件参数结构体,可以根据实际需求修改
struct EventData {
    int value;
};

// 事件处理函数类型定义
using EventHandler = std::function<void(const EventData&)>;

// 发布者类
class Publisher {
public:
    void publish(const EventData& data) {
        for (const auto& handler : subscribers) {
            handler(data);
        }
    }

    void subscribe(EventHandler handler) {
        subscribers.push_back(handler);
    }

private:
    std::vector<EventHandler> subscribers;
};

// 订阅者类示例
class Subscriber {
public:
    Subscriber(const std::string& name) : name(name) {}

    void onEvent(const EventData& data) {
        std::cout << name << " received event with value: " << data.value << std::endl;
    }

private:
    std::string name;
};

int main()
{
    Publisher publisher;

    Subscriber sub1("Subscriber 1");
    Subscriber sub2("Subscriber 2");

    // 订阅者注册事件处理函数,这里将sub1的onEvent成员函数,传入到publisher的容器中,被后续publish触发调用。
    publisher.subscribe(std::bind(&Subscriber::onEvent, sub1, std::placeholders::_1));
    publisher.subscribe(std::bind(&Subscriber::onEvent, sub2, std::placeholders::_1));

    EventData event = { 42 };
    publisher.publish(event);

    EventData event2 = { 43 };
    publisher.publish(event2);

    return 0;
}
在这个示例中:
  1. Publisher
    • 有一个publish方法,用于遍历所有订阅者的事件处理函数,并调用它们,将事件数据传递给每个订阅者。
    • 有一个subscribe方法,用于将订阅者的事件处理函数添加到subscribers向量中。
  2. Subscriber
    • 每个订阅者有一个onEvent方法,这个方法定义了订阅者如何处理接收到的事件。在main函数中,通过std::bindSubscriberonEvent方法绑定到Publishersubscribe方法上,从而注册为事件处理函数。
  3. main函数中:
    • 创建了一个Publisher对象和两个Subscriber对象。
    • 两个Subscriber对象分别订阅了Publisher发布的事件。
    • 然后创建一个EventData对象,并通过Publisherpublish方法发布这个事件,此时所有订阅者都会接收到这个事件并进行相应的处理。

注意,这是一个非常基础的发布 / 订阅机制示例,在实际应用中,可能需要更多的功能,如事件类型的区分、动态订阅 / 取消订阅、多线程安全性等。

 

标签:std,订阅,函数,Publisher,示例,c++,Subscriber,例子,类掉
From: https://www.cnblogs.com/lyggqm/p/18453628

相关文章

  • (分享源码)计算机毕业设计必看必学 上万套实战教程手把手教学JAVA、PHP,node.js,C++、pyth
    摘要信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对社区防疫管理等问题,对社区防疫管理系统进行研究分析,然后开发设计出基于Django框架的社区防......
  • 实验1 现代C++编程初体验
    任务1:task1.cpp1//现代C++标准库、算法库体验2//本例用到以下内容:3//1.字符串string,动态数组容器类vector、迭代器4//2.算法库:反转元素次序、旋转元素5//3.函数模板、const引用作为形参67#include<iostream>8#include<string>9......
  • C++的四种类型强转
    C++的四种类型强转文章目录C++的四种类型强转前言1.static_cast2.const_cast3.dynamic_cast4.reinterpret_cast总结前言在C++编程中,类型转换是一个常见且重要的操作。然而,随意使用C风格的类型转换可能会导致难以发现的错误和潜在的安全隐患。为了......
  • C++11新特性—引用折叠
    引用折叠引用折叠(ReferenceFolding)是C++11中引入的一项特性,主要用于模板编程和完美转发(perfectforwarding)中。它涉及到了引用类型(左值引用和右值引用)的组合规则,特别是在模板元编程中,如何确定模板实例化后的引用类型。1.基本概念在C++中,有三种基本的引用类型:左值引用(lv......
  • 【C++ 10】多态
    文章目录......
  • 【C++】map详解
    ......
  • 【C++】继承
    C++的继承1.继承的概念及定义1.1继承的概念1.2继承定义1.2.1定义格式2.基类和派生类对象赋值转换3.继承中的作用域4.派生类的默认成员函数5.继承与友元6.继承与静态成员7.复杂的菱形继承及菱形虚拟继承7.1单继承、多继承与菱形继承7.2虚继承7.3虚继承的原理1.......
  • 【C++】多态
    文章目录1.多态的概念1.1概念2.多态的定义及实现2.1多态构成的条件2.2虚函数2.3虚函数的重写2.4C++11override和final2.5重载、覆盖(重写)、隐藏(重定义)的对比3.抽象类3.1概念3.2接口继承和实现继承4.多态的原理4.1虚函数表与多态原理4.2动态绑定与静......
  • C++ day03(作用域限定符、this、static、const)
    目录【1】作用域限定符::1》名字空间2》类内声明,类外定义 【2】this关键字1》概念2》调用成员3》区分重名的成员变量与局部变量4》链式调用 【3】static关键字1》静态局部变量2》静态成员变量3》静态成员函数【4】const关键字1》修饰成员函数2》修饰对象 ......
  • 如何在VSCode上运行C/C++代码
    诸神缄默不语-个人CSDN博文目录我是Win10,其他系统仅供参考。文章目录1.下载所需插件2.安装编译器3.不借助编辑器的cpp代码执行3.建立VSCodecpp项目3.1c_cpp_properties.json3.2settings.json3.3tasks.json4.运行C++代码参考资料1.下载所需插件2.安装......