boost库:事件处理
boost库的signal所实现的模式被命名为信号至插槽,当对应的信号被发出时,相关联的插槽即被执行。
#include <boost/signal.hpp>
#include <iostream> void func() {
std::cout << "Hello, world!" << std::endl;
} int main() {
boost::signal<void()> s;
s.connect(func);
s();
return ;
}
boost::signal被实现为一个模板函数,具有被用作为事件处理器的函数的签名,该签名也是它的模板参数。上例中,只有签名为void()的函数才可以被成功关联至信号s。当信号s被触发时,func函数被调用。
上述例子也可以使用boost.function来实现:
#include <boost/function.hpp>
#include <iostream> void func() {
std::cout << "Hello, world!" << std::endl;
} int main() {
boost::function<void()> f;
f = func;
f();
return ;
}
但signals可以关联多个函数至单个信号,如下:
#include <boost/signal.hpp>
#include <iostream> void func1() {
std::cout << "Hello" << std::flush;
} void func2() {
std::cout << ", world!" << std::endl;
} int main() {
boost::signal<void()> s;
s.connect(func1);
s.connect(func2);
s();
return ;
}
boost::signal可以通过反复调用connect()方法来把多个函数赋值给单个特定信号。当该信号被触发时,这些话函数按照之前用connect()关联的顺序来执行。执行顺序也可以通过connect()方法的另一个重载版本来明确指定,如s.connect(1, func2); s.connect(0, func1)
释放关联,使用disconnect()方法,s.disconnect(func2)。
s.num_slots() 返回已关联函数的数量。
s.empty() 是否关联函数。
s.disconnect_all_slots() 释放所有已有的关联。
#include <boost/signal.hpp>
#include <iostream> int func1() {
return ;
} int func2() {
return ;
} int main() {
boost::signal<int()> s;
s.connect(func1);
s.connect(func2);
std::cout << s() << std::endl; //缺省情况下,所有被关联的函数中,实际上只有最后一个返回值被返回。
return ;
}
Connections 连接:
connect()方法会返回一个类型为boost::signals::connection的值。
#include <boost/signal.hpp>
#include <iostream> void func() {
std::cout << "Hello, world!" << std::endl;
} int main() {
boost::signal<void()> s;
boost::signals::connection c = s.connect(func);
s();
c.disconnect(); //等价于s.disconnect(func)
return ;
} int main() {
boost::signal<void()> s;
boost::signals::connection c = s.connect(func);
c.block();
s(); //虽然触发,但c已经被block()调用阻塞。
c.unblock(); //unblock()后,func可以被执行。
s();
return 0; //func()只会被调用一次。 boost::signals::scoped_connection c = s.connect(func); 析构时自动释放连接。
}
boost库:事件处理的更多相关文章
- 新手,Visual Studio 2015 配置Boost库,如何编译和选择,遇到无法打开文件“libboost_thread-vc140-mt-gd-1_63.lib“的解决办法
1,到官网下载最新的boost,www.boost.org 这里我下载的1-63版本. 2,安装,解压后运行bootstrap.bat文件.稍等一小会就OK. 3,编译boost库.注意一定要使用VS ...
- vs2013给项目统一配置boost库
1.打开项目,然后点击菜单中的 视图->其他窗口->属性管理器 2. 打开属性管理器,点击项目前的箭头,展开项目,找到debug或者release下面的Microsoft.Cpp.Win3 ...
- [C/C++] C/C++延伸学习系列之STL及Boost库概述
想要彻底搞懂C++是很难的,或许是不太现实的.但是不积硅步,无以至千里,所以抽时间来坚持学习一点,总结一点,多多锻炼几次,相信总有一天我们会变得"了解"C++. 1. C++标准库 ...
- dev c++ Boost库的安装
dev c++ 的boost库的安装步骤 然后点击“check for updates”按钮 最后点击“Download selected”按钮,下载完成后安装.... 给dev添加boost库文件, ...
- vs配置boost库
步骤: 1.在boost官网下载boost版本,以1.59.0为例. 2.解压,解压后可看到文件夹下有个bootstrap.bat文件. 注意: 如果有以下error: 'cl' 不是内部或外部命令, ...
- windows下安装boost库
工作中现在会接触boost,所以我计划两个月之内努力熟悉一下boost.今天在自己win10系统上尝试安装了boost库,下面把遇到的问题总结一下: 1. 下好1.61版本库,在boost目录下运行b ...
- ubuntu 下安装boost库
ubuntu下安装boost库,,在网上试了一些其他人推荐的libboost-dev 但是会缺少,编译程序会报错: /usr/bin/ld: cannot find -lboost_serializa ...
- linux下编译安装boost库
linux下编译安装boost库 linux下编译安装boost库 1.下载并解压boost 1.58 源代码 下载 解压 2.运行bootstrap.sh 3.使用b2进行构建 构建成功的提示 4. ...
- C++ | boost库 类的序列化
是的,这是今年的情人节,一篇还在研究怎么用的文章,文结的时候应该就用成功了. 恩,要有信心 神奇的分割线 不知何时装过boost库的header-only库, 所以ratslam中的boost是可以编 ...
随机推荐
- modelviewset 中的序列化方法怎么用
- 深度学习中的batch、epoch、iteration的含义
深度学习的优化算法,说白了就是梯度下降.每次的参数更新有两种方式. 第一种,遍历全部数据集算一次损失函数,然后算函数对各个参数的梯度,更新梯度.这种方法每更新一次参数都要把数据集里的所有样本都看一遍, ...
- Maven开始
1:加入Maven插件: 这句话的意思是: 从本地仓库找到相应的jar包 <localRepository>F:\RepMaven</localRepository 2:创建一个Ma ...
- Dllregisterserver调用失败解决方法
在做一个注册com组件时,出现这样的情况 出现这个错误一般是和权限问题有关,命令提示符需要以管理员权限运行才可以注册成功. 最简单的解决方法就是: 在开始菜单右击—>命令提示符(管理员)(A) ...
- element菜单默认展开和选中
这两个属性, :default-openeds="openeds" default-active="/networkConfig"中设置的要与数组中的index ...
- vue将页面导出成pdf
npm i jspdf-html2canvas prinOut(){ // 导出pdf let page = document.querySelector('.app-main'); // page ...
- 4 November in ss
Contest A. 输油管道问题 某石油公司计划建造一条由东向西的主输油管道.该管道要穿过一个有 \(n\) 口油井的油田.从每口油井都要有一条输油管道沿最短路经 (或南或北) 与主管道相连.如果给 ...
- BeautifulSoup的用法
BeautifulSoup是一个模块,该模块用于接收一个HTML或XML字符串,然后将其进行格式化,之后遍可以使用他提供的方法进行快速查找指定元素,从而使得在HTML或XML中查找指定元素变得简单. ...
- HDU 3183 A Magic Lamp(RMQ问题, ST算法)
原题目 A Magic Lamp Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- js不同类型作比较
引用自 http://www.zhufengpeixun.cn/jishuziliao/javaScriptzhuanti/2014-06-14/300.html 不同类型间的比较,规律如下 类型 类 ...