C++boost库信号槽的使用

本文介绍了C++ Boost库中的信号槽机制,强调其用于解耦合的重要作用。通过示例程序展示了如何使用`boost::signals2`库创建和连接信号槽,以及如何通过`std::bind`传递参数。示例中,`sig1`和`sig2`信号分别触发了`slots1`和`slots2`函数的调用,体现了信号槽的灵活性和可扩展性。
摘要由CSDN通过智能技术生成

C++boost库信号槽的使用

为什么使用信号槽

为了解耦,因为建设一定规模的程序时,为了未来的可维护性扩展性,使用信号槽是个不错的想法。
好比某道菜可能有多个方法去制作,所以我们在炒制的地方标注根据客人需求制作,这样就不至于客人需求不一样时就需要给厨师一份新的菜谱为了替换菜谱上的某个小地方,这样实现了解耦。

使用的库

我们这里使用boost的信号槽库,安装boost库后可以包含以下来使用库中的方式实现功能。
#include <boost/signals2.hpp>

例程

#include <iostream>
#include <boost/signals2.hpp>
using namespace boost::signals2;

typedef signal<void(int, int)> vi_sig;
vi_sig sig2;

void slots1() {
    std::cout << "slot 1 called" << std::endl;
}

void slots2(int a, int b, int c) {
    std::cout << "slot 2 get a " << a
    << " get b " << b
    << " get c " << c << std::endl;
}

void SetEventDataReceived(slot<void(int, int)> func)
{
    sig2.connect(func);
}

int main() {
    signal<void()>sig1;
    sig1.connect(slots1);
    sig1(); 
    SetEventDataReceived( std::bind(slots2 ,  std::placeholders::_1, std::placeholders::_2, 3) );
    sig2(1, 2); 
    return 0;
}

得到打印结果:
slot 1 called
slot 2 get a 1 get b 2 get c 3

程序中:
我们主要通过signal来连接和使用信号槽

boost::signals2::signal<void()>sig1;
sig1.connect(slots1);
sig1(); 

连接的方式还可以通过:

void SetEventDataReceived(slot<void(int, int)> func){
    sig2.connect(func);
}

这样的方式来通过函数来连接目标函数进一步实现解耦,
若要传递更多参数,可以在main中通过bind来传递。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值