• 函数参数Boost库bind函数的嵌套调用


    查了好多资料,发现还是不全,干脆自己整理吧,至少保证在我的做法正确的,以免误导读者,也是给自己做个记录吧!

        

    问题提出:

        我写了一个函数,它要需应用一个生成整数随机数的随机数发生器作为参数。然后写了一个函数来根据参数生成不同分布的随机数发生器,供前一个函数应用。我用调了boost库的一些基于特定概率分布的随机数生成函数,但是有很多函数的结果是double型的。

        我的函数将随机数发生器定义为boost::function<int()>类型。很明显那些生成double的函数不能直接通过bind operator()的式方失掉,而要需类型转换。而这个应用bind/function的嵌套用调就较比麻烦了。

        

        设假我有两个函数:

    int trans(double);
    double gen();

        我希望的结果是失掉一个函数象对:它应用gen生成原始数字,然后用trans函数把它转成形整返回;即失掉一个这样的函数:

    int fun(){
        return trans(gen());
    }

        

        我这里还是无参数的,所以欠好应用lambda表达式。

        

    终最计划与要点:

        

    这个问题解决许久,心伤啊,进程就略过了,直接说终最方法。

        设假应用面前的函数明声,那么这个函数象对应当这么生成:

        每日一道理
    “上下五千年,龙的看火不灭;古有愚公志,而今从头越…… ”站在新世纪的门槛上,我们的追求就是让祖国灿烂的喜悦飞扬在美好的明天……
    boost::function<int()> fun=boost::bind(trans,boost::bind(gen));

        其中要应用两次bind!

        内层的那个看似没什么用,但是如果不适用它的话,boost不会为以我们要定绑的第一个参数是一个函数,而是为以我们要定绑一个体具的值,这个数字的值由这个gen函数生产。这时编译器会报“没法将double(void)类型转换为double类型”的错误。

        

        样同的其他参数式形的(要需应用lambda库)、多层的函数嵌套定绑,都应当意注要把内层的函数通过bind酿成一个可传递的象对,而不能直接写函数名!

        bind定绑的各个西东都是象对(括包基本数据类型),是不支持把参数直接定绑为函数的,要这边做必须先把函数酿成可以由自传递的象对!

        另外不要为以你的参数已经是函数象对了就能够直接写了,还要再写bind(),体具因原还不清晰。

        

        

    其他验经:

        1,static_cast<T>()是运算符而不是函数!所以不能定绑。

        2,boost/lambda/casts.hpp供给的ll_static_cast<T>虽然是函数,但是要需意注的是它是有两个模板参数的模板函数,在定绑的时候我们不能给出参数的现实类型(外侧的bind函数给ll_static_cast供给的是funnction<int()>的类型而不是int),因而也不能应用ll_static_cast,要自己写转换函数。

        3,bind和lambda/bind有冲突,而且很多功能叠重,用一个就好了。

    文章结束给大家分享下程序员的一些笑话语录: 一条狗在街上闲逛,看见橱窗里一张告示:「招聘程序员。会编程,有团队精神,至少精通两种语言。均等机会。」
      那条狗就进去申请,但是被拒绝了。
      「我不能雇一条狗在公司里做事。」经理说。
      狗不服气,指着告示上「均等机会」几字抗议。
      经理没法,叹了口气,不屑地问道:「你会编程吗?」
      那条狗默默地走到电脑前,编了个程序,运作准确。
      「你有团队精神吗?」经理问。
      那条狗掉头看了看门外,一大群野狗在外面虎视耽耽。
      「我真的不能雇狗做这份工作。」经理气急败坏地说。
      「就算会编程、有团队精神,但是我需要的雇员至少要能精通两种语言。」
      那条狗抬头看着经理说:「喵-噢。」

  • 相关阅读:
    爬取博客园有关爬虫的文章
    小只爬虫的相关思路
    fiddler显示出服务器IP方法
    在测试时用到的一些mysql的小技巧(持续更新)
    把python脚本打包成win可执行文件
    关于SQL中的ROWNUM问题
    关于C#的DataGridView设置了DataSource后Rows无值问题
    微信小程序wx.request的简单封装
    ASP.NET进行请求转发
    微信小程序设置滚动条
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3036000.html
Copyright © 2020-2023  润新知