boost function bind:bind时怎么设置默认值

levels of contents新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
白手起家, 积分 92, 距离下一级还需 108 积分
论坛徽章:0
class Person
{
public:
& & Person(const string& _name):name(_name){}
& & string Name()
& & {& &
& && &&&
& & }& &
& &
};
int main()
{
& & Person p1(&hello&);
& & boost::bind(&Person::Name, _1)(p1);
& & return 0;
}复制代码对于这样的 bind 我不知道 该 怎么处理它的返回值, 如果是 boost::bind(&Person::Name,p1)&&返回值可以是 boost::function&string()& fun = boost::bind(&Person::Name,p1)
可是对于这个 boost::bind(&Person::Name, _1) 我不知道 该 怎么存储它的返回值,
望 高手解答
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
白手起家, 积分 29, 距离下一级还需 171 积分
论坛徽章:0
没看懂……你确定boost::bind(&Person::Name, _1)(p1);这句话可以编译通过么?可以正常运行么?
都没有传递函数对象的指针……应该是这样吧 boost::bind(&Person::Name, &p1, _1)(&我是谁&);然后这句话实际上已经开始调用函数了,返回值就是string。
boost::bind(&Person::Name, &p1, _1);这个才是你要的仿函数。
白手起家, 积分 92, 距离下一级还需 108 积分
论坛徽章:0
当然可以的回复
luciker1988
白手起家, 积分 29, 距离下一级还需 171 积分
论坛徽章:0
刚试了下 返回值是这个
boost::function&std::string (Person&)& F = boost::bind(&Person::Name, _1);
这种写法应该是绑定了一个引用。
巨富豪门, 积分 38198, 距离下一级还需 1802 积分
论坛徽章:4
成员函数,第一个参数你都没bind成对象,怎么可能调的起来。
白手起家, 积分 92, 距离下一级还需 108 积分
论坛徽章:0
我上面 都说了 可以,肯定是可以的,这是 和 stl算法的 结合使用,你试一下 再说呀,无语回复
linux_c_py_php
白手起家, 积分 92, 距离下一级还需 108 积分
论坛徽章:0
可以,可以,确实 可以回复
luciker1988boost或C++11中的bind怎么自己实现? - 知乎42被浏览2459分享邀请回答32 条评论分享收藏感谢收起auto bar = bind(foo, _1, 2.0);
第二步: 调用 functor
对象, 做类型匹配, 生成对应的 函数调用语句第三步: 传递参数, 调用函数bar(1);
二三步是一条语句, 但 2 指编译时, 3 发生在运行时.第一步函数原型保存bind 返回的是一个 functor. 接受的是 Callable.C++ 里的 "Callable" 被定义为: ,重点看 INVOKE, 凡是可以被 INVOKE 使用的, 都被称为 Callable. 一共五种情况, 使用 SFINAE 做 resolution. 详见链接.所以首先把这个 Callable 存起来. 存一份拷贝.参数保存参数使用 tuple 保存, 可能的实现是:bind_functor(F f, Args... args)
:m_f(f), m_bound_args(std::forward(Args)(args)...)
这里不对参数做处理. placeholder 啊 类型不匹配啊参数数量不对啊统统不管. 因为压根管不了.做个约定, bind_functor 指 bind 返回的 functor 对象, m_f 是 bind_functor 保存的 Callable, m_bound_args 指保存的 "形参". m 打头的都是成员变量辣第二步第二步要调用 生成的 functor 了.bar(1);这里实参出现了, 所以在这一步做类型匹配, placeholder 填入.首先是 tuple 到函数参数的转换,
看这个好了.但 bind 做的事情还要多一些, 它要确定实参类型, 如果是 placeholder 的怎么怎么样, 是另一个 bind expression 的怎么怎么样. 具体细节看这里
Member function operator() 一节.要多做的工作也能通过 tuple 和模板搞定. 不细说了.到第二步, 类型决议已经完成, 最终会在 bind_functor::operator() 内编译期生成一个对 m_f 的调用:原先的代码是这样的:operator()(Args...args) {
INVOKE(m_f, do_some_thing&m_bound_args, Args&(args)...);
通过模板实例化, INVOKE 变成了m_f(arg1, arg2, ...);
第三步调用. 因为 arg1, arg2... 的值都在运行时才能知道(强调一下类型在第二步已经知道了).------------------------------PS: 在 03 时代, 所有 variadic template 的使用以及 tuple 都可以用穷举法模拟. 比如template &class T1, class T2, class T3, ...., class T50&
所以不必担心 没 11 编译器可用怎么办的问题艹竟然不能匿名了95 条评论分享收藏感谢收起查看更多回答> boost bind
使用bcp exe剪切boost库:首先百度,得到如下结果。
CAFFE源码学习笔记之五:该类实际是boost::thread的包裹器。boost十分强大,可以不用修改就在l
在cygwin下编译boost库:如果你想在Vistual Studio下使用boost的话大可不必如此麻烦。请自行搜索
基于Boost库生成随机数:Boost库怎么生成随机数呢?希望下面的文章对大家有所帮助。
Win10 VS2013编译Boost 1 62 0
redis启动出错CreatingServerTCPlisteningsocket127 0 0 1:6379:bind:Noerror,windows下安装redis第一次启动报
linux c下简单实现服务端与多客户端同时连接:对于服务器端来说,通过bind、listen,之后acce
nginx: [emerg] bind() to 0 0 0 0:80 failed (98: Address already in use), usr local nginx sbin nginx 启动nginx报错
call()、apply()、bind()详解,在 JavaScript 中,this 是指当前函数中正在执行的上下文环境;当你
CentOS7搭建DNS服务器:安装服务 bind,yum install bind*,二、修改主配置文件,cp
etc named conf
variant是什么?variant的用法。
QT Creator mingw使用boost:windows开发环境, 在 pro 文件中配置使用boost的方法。
上一讲主要讲解了blending and bagging。blending的主要思想是为了把我们手上的小区合并成一个
最近一个project要用到人脸检测(face detection),发现一个叫dlib的toolkit很好用,detect的灵敏
利用boost来获取当前时间又方便快捷,还不用考虑跨平台的问题。
CentOS7搭建DNS服务器:一、安装服务 bind。
这几个都是jquery中事件绑定的方法,之所以有这么多类型的绑定方法,是因为jQuery的版本更
DNS(域名系统)是经常容易配置出错的一个网络组件。直接使用现成的DNS服务是大部分人的
在windows上安装redis。 zip解压的方式是菜鸟教程网里面推荐的,不知什么原因经常报:6379bind
javascript 绑定事件的几种方法。live方法其实是bind方法的变种,其基本功能就同bind方法的功
vs2015 64位下boost log 无法链接:错误信息:1>main obj : error LNK2019: 无法解析的外部符号, "priva
C++“准”标准库Boost学习指南(12):Boost Signals。信号和接收系统,基于称为publisher-subscriber
对于原始数据类型,当这些操作调用的时候,数据是简单的“被存储 被装载”“到 从”档
智能指针用于指向存放在堆,即动态分配对象指针的类,用于对指针所指向的对象生存期的
在异步编程中,各种回调将让人眼花缭乱,代码分散,维护起来十分困难。boost和C++11 的 fut
在使用React中 如果使用ES6的Class extends写法 如果onClick绑定一个方法 需要bind(this),而使用Reac
MySQL运维(2) 外网访问MySQL。一
设置MySQL配置文件:找到文件 etc mysql my cnf 注释掉bind-address=12
angular js初始化命令ng-init,ng-bind。在angular js可以通过ng-init来初始化所需要的数据。而不需
AngularJS的四大核心特性。AngularJs中模块的依赖注入,ng-model、ng-bind和{{}}的区别,路由机制
教你一招,Redhat用光盘中rpm包配置dns服务器,dns服务器,需要4个rpm包bind-9 3 4-10 P1 el5、bind-c
热门文章热门标签
11月20日 |
11月20日 |
11月20日 |
11月20日 |
11月20日 |
11月20日 |
11月21日 |
11月21日 |关于boost::bind的问题【c++吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:289,001贴子:
关于boost::bind的问题收藏
typedef std::set&int& ID_SID_Set idlist, skip_id, result_std::remove_copy_if( idlist.begin(), idlist.end(), std::inserter( result_id, result_id.end()),boost::bind&ID_Set::const_iterator&(&ID_Set::find, &skip_id, _1) != skip_id.end() );//在vs2008下没问题,2015就不行了,还请指教!!!boost::bind&ID_Set::const_iterator&(&ID_Set::find, &skip_id, _1)现在可以确定是这句有问题,vs2015报错说:不能将参数1从‘overloaded-function'转化为迭代器。同时,在模板推导时,可以看到参数1是一个迭代器,而不是一个成员函数!问题1:为什么模板推导时,参数1是一个迭代器,而不是一个成员函数?问题2:vs2008可以而vs2015不行的原因就什么?还请各位不吝赐教!!!!
达内c++培训,0基础,从入门到精通只需120天,可就业后付款,签订c语言就业协议,c++培训,首选达内,美国上市公司,靠谱,值得信赖!
bind不是已经加入stl了吗……为啥还用boost……
另外vs2015已经支持c++14标准,很多旧式写法应该替换成c++11风格,比如如果算法不改变容器的元素,使用cbegin(),cend()生成常量迭代器,用lambda代替bind。这里用lambda会清晰很多……
//用新标准实现的话应该这么写//如果编译器不支持c++11我也不知道怎么解决:p#include &functional&#include &unordered_set&#include &algorithm&#include &iterator&#include &iostream&int main(){//使用using为声明类型别名using ID =using ID_Set = std::unordered_set&ID&;//使用{}初始化容器const ID_Set id_set = { ,, };const ID_Set skip_set = { ,10005 };ID_Set result_std::remove_copy_if(id_set.cbegin(), id_set.cend(), //该算法不改变id_set内的元素,因此使用常量迭代器std::inserter(result_set, result_set.begin()),[&skip_set](const ID& id) {return skip_set.find(id) != skip_set.cend();//使用lambda表达式代替bind});//range-for 输出元素for (const auto& item : result_set){std::cout && item && & &;}std::cout && std::system(&pause&);}
登录百度帐号推荐应用

我要回帖

更多关于 boost bind 成员函数 的文章

 

随机推荐