Code前端首页关于Code前端联系我们

C++ Signal:简单实用的信号与槽机制

terry 2年前 (2023-10-01) 阅读数 105 #c++
文章标签 数据库

一、Signal是什么?

Signal(信号)是C++中实现观察者模式最常用的工具之一,是一种机制,允许对象间的通信,使得某一对象改变时,与之相关的对象能够收到通知并进行响应。

Signal机制和槽(Slot)机制通常成对出现,Signal发出信号,Slot响应Signal的信号。对于同一个Signal,可以有多个Slot响应,同样,一个Slot也可以响应多个Signal。这种机制实现了对象之间的耦合度低、可复用性高、代码简洁等优点。

二、Signal与STL

Signal机制的实现通常是使用C++的STL库中的模板类,其基本思路是用一个容器存储所有的Slot,并在Signal被触发时,迭代遍历所有的Slot进行响应。

以下是一个简单的Signal的实现:

template
class Signal;

template
class Signal
{
public:
    using SlotFunction = std::function;
    
    void Connect(SlotFunction slot)
    {
        slots_.push_back(slot); // 存储Slot
    }
    
    void Emit(Args... args)
    {
        for (SlotFunction& slot : slots_) // 迭代遍历所有Slot
            slot(args...); // 响应Slot
    }
    
private:
    std::vector slots_;
};

使用示例:

Signal Signal1;
Signal1.Connect([&](int n) { std::cout 

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门