C++名家对话-014The Bind That Ties.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C名家对话-014TheBindThatTies

C++名家对话-014The Bind That Ties The Bind That Ties 徐波 翻译 -------------------------------------------------------------------------------- 尽管亚洲船队的到来已是迫在眉睫,而且我们的高官们未就此事公开发表评论,但我们的生活却回复平静,几乎和以往一样普通。谣声渐起,且有蔓延之势,但外星文物的发掘和研究工作仍有条不紊地进行着。 珍妮和我正手忙脚乱地修补一个破裂水管的分枝。一根“Y”水管的一个分枝突然破裂,水迅猛地喷出,把她淋了个落汤鸡。“快过来帮忙!”她大声叫喊,试图用一只人工封口将它盖住,防止水喷射,但明显无济于事。 我赶紧拿了一只夹子,把封口夹住,然后迅速将封口固定住。夹子被适当地与封口固定牢后,水注只剩下几道小水流,接着就止住了,大功告成。现在“Y”形水管的一个分枝已被封死,水只能流向另外一个分枝。 “是不是又让你想起了你的第一个工作。”珍妮边说边用毛巾擦着蓬乱的头发。 我咧嘴一笑,“确实如此。尝试过太多的选择后,只剩下一个…” -------------------------------------------------------------------------------- Guru正对我最近摆弄过的一些代码进行回顾。一切都还正常,直到她遇到下面这个函数: void f(std::vectorint vect) { std::vectorint::iterator firstOne; for (firstOne = vect.begin(); firstOne != vect.end(); ++firstOne) { doSomething(*firstOne, Some string literal); } } Guru抬头看看会议桌对面的我:“我的孩子,这个函数并无必要。你可以用受宠的for_each函数来完成同样的功能。”由于还有个学生也在席,所以她用词严肃。我表示歉意,看到那个可怜的学生的脸上流露出几分惧意,又感到同情。 “嗯,”我低声说道,“是这样的,我试过for_each,但它需要一个只接受一个参数的函数。可我必须向doSomething传递两个参数,所以无法使用for_each。” 我的回答让她眉头更锁:“你有没有考虑过使用适配器(adaptor),象bind1st?” 我怯生生地申辩道:“是这样的,blindlst看上去总有点复杂,我怎么也想不出它“捆绑(bind)”参数是什么意思,所以,我属于那种……反正我没考虑用它。” 我以为Guru会摆出导师的架子,狠狠地瞪我。但她只是平静地点点头,嘴角写出淡淡的笑意:“我的孩子,当你面对你不理解的东西时,千万不可胆怯。必须承认自己的无知,勇敢地面对它,你才会长进。”她若有所思地停顿了一下。 “让我们从头开始,”她接着说,“为简单起见,我把bind1st和bind2nd简称为bind函数,这样你就可以把二元函数对象当作一元函数对象来使用。” “所以,”我慢声说道,“你的意思是,因为doSomething函数接受两个参数,它是个二元函数,也就是说,我可以使用bind1st函数,把它转换成一个一元函数,是不是?” “很好,我的学徒工。你走对了路子,但还不够深入。我说过bind函数允许你使用二元函数对象。特别地,bind函数使用的函数对象必须从binary_function派生,或必须提供跟binary_function一样的typedef形式。现在,有了这些信息,你该怎样修改你的作品来使用functor呢?” 有时候,我觉得Guru这种苏格拉底式的方法比我大学时的任何考试都要紧张,压力也更大。感受到她咄咄逼人的目光,我开始在白写字板上细心书写: 我听到Guru清了清嗓子,便扭过头去,她递给我一本Stroustrup的经典作品,我快速地查阅了一下binary_function: template class Arg, class Arg2, class Res struct binary_function { typedef Arg first_argument_type; typedef Arg2 second_argument_type; typedef Res result_type; }; [1] “好家伙,一上来就出错。”我心想,把类的声明修改为: class doSomething : public std::binary_functionint, const char *, void { pu

文档评论(0)

hf916589 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档