文档章节

boost bind和function实现动态不定参数绑定原来如此简单

M
 Mr-Yang
发布于 2015/11/02 11:47
字数 284
阅读 1252
收藏 1
void test1()
{
//do something
}

void test2(int i)
{
//do something
}

void test3(int i, int j)
{

}

struct A
{
    void test(int i, int j)
    {
    
    }
}

 boost::function<void()> f;
boost::function<void(int)> f1

f = boost::bind(&test1);
f();
f = boost::bind(&test2, 1);
f();
f = boost::bind(&test3, 1, 2);
f();
f1 = boost::bind(&test3, 1, _1);
f1(2);//此处要传参数所以要用f1
A a;
f = boost::bind(&A::test, &a, 1, 2);
f();
f1 = boost::bind(&A::test, &a, 1, _1);
f1(2); //此处要传参数所以要用f1

可以看出boost::function<>模板只要提供了返回值和调用function时候传递的参数类型就行了,如果调用时候没有参数就可以boost::function<void()>通吃了

以前实现一个异步sql查询需要实现好多参数模板,一个继承一个,简直到最后自己都看不懂,出错调试简直是看天书。现在好了直接用个队列里面放boost::function<void(ResultSet*)>和sql语句, 查询时候bind好给回调函数和传递的参数,用一个线程取队列查询完后执行function把结果集传给回掉函数。

© 著作权归作者所有

共有 人打赏支持
M
粉丝 0
博文 7
码字总数 2285
作品 0
松江
私信 提问
boost:bind使用指南

bind - boost 头文件: boost/bind.hpp bind 是一组重载的函数模板. 用来向一个函数(或函数对象)绑定 某些参数. bind的返回值是一个函数对象. 它的源文件太长了. 看不下去. 这里只记下它的用法...

follitude
2016/08/04
8
0
C++11 FAQ中文版:std::function 和 std::bind

三 2 Year 2011 陈 良乔 C++11 FAQ std::function 和 std::bind 标准库函数bind()和function()定义于头文件中(该头文件还包括许多其他函数对象),用于处理函数及函数参数。bind()接受一个函...

长平狐
2013/01/11
161
0
新的bind库 (bi-bind), 对boost::bind的精简

boost中有一个bind库, 可以说是一个最为实用的tools了, 但是它与boost结合的有些紧密,而且其中的一些功能并不是很常用,就算将它bcp出独立的库也是一个不小的负担。如果在你的项目中不打算...

蜗牛狂奔吧
2013/05/08
0
1
boost::bind的使用方法

bind - boost 头文件: boost/bind.hpp bind 是一组重载的函数模板. 用来向一个函数(或函数对象)绑定某些参数. bind的返回值是一个函数对象. 它的源文件太长了. 看不下去. 这里只记下它的用法...

临峰不畏
2013/03/18
0
0
关于Function.prototype.bind

bind()方法会创建一个新函数,称为绑定函数。当调用这个绑定函数时,绑定函数会以创建它时传入bind()方法的第一个参数作为 ,传入 bind() 方法的第二个以及以后的参数加上绑定函数运行时本身的参...

黑魔法
2018/04/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

树形结构的数据库表Schema设计

程序设计过程中,我们常常用树形结构来表征某些数据的关联关系,如企业上下级部门、栏目结构、商品分类等等,通常而言,这些树状结构需要借助于数据库完成持久化。然而目前的各种基于关系的数...

太菜鸟
18分钟前
0
0
Pod在多可用区worker节点上的高可用部署

一、 需求分析 当前kubernetes集群中的worker节点可以支持添加多可用区中的ECS,这种部署方式的目的是可以让一个应用的多个pod(至少两个)能够分布在不同的可用区,起码不能分布在同一个可用...

迷你芊宝宝
27分钟前
0
0
使用maven命令上传jar包到仓库

mvn deploy:deploy-file -DgroupId=com.jz.tss.service -DartifactId=tss-service -Dversion=1.9.02-SNAPSHOT -Dfile=E:/Workspace/tss-service/build/oracle/TSS-Service/WEB-INF/lib/TSS-S......

GodIsCj
28分钟前
1
0
mysql 向下无限递归(不使用函数,单纯sql)

表结构和数据 CREATE TABLE table1(id int, name varchar(10), parent_id int); INSERT table1 VALUES (1, 'Home', 0), (2, 'About', 1), (3, 'Contact', 1), (4, 'Legal', 2), ......

一雨成东
29分钟前
0
0
面试官问:ZooKeeper 一致性协议 ZAB 原理

一致性协议有很多种,比如 Paxos,Raft,2PC,3PC等等,今天我们讲一种协议,ZAB 协议,该协议应该是所有一致性协议中生产环境中应用最多的了。为什么呢?因为他是为 Zookeeper 设计的分布式...

Java爬坑之路
32分钟前
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部