码迷,mamicode.com
首页 > 编程语言 > 详细

c++ 11新特性之bind()与function

时间:2014-10-15 19:07:32      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   使用   ar   sp   数据   div   

bind()和function()  这两个函数在std的标准库中,提供c++对函数以及对象的控制

 

bind()  顾名思义就是“绑定” ,而bind()是和函数有关,所以就是绑定某个函数,请看一下代码

 

    

    int f(int, char, double);
    auto ff = bind(f, _1, c, 1.2);    // 绑定f()函数调用的第二个和第三个参数,返回一个新的函数对象为ff,它只带有一个int类型的参数
    int x = ff(7);                //  f(7, ‘c‘, 1.2);

我们无法使用bind()绑定一个重载函数的参数,我们必须显式地指出需要绑定的重载函数的版本


 

function()  是一个拥有任何可以以"(...)"符号进行调用的值的类型。特别地,bind的返回结果可以赋值给function类型。function十分易于使 用。(译注:更直观地,可以把function看成是一种表示函数的数据类型,就像函数对象一样。只不过普通的数据类型表示的是数据,function表 示的是函数这个抽象概念。),请看一下代码

     

        function<float (int x, int y)> f;        // 构造一个函数对象,它能表示的是一个返回值为float,两个参数为int,int的函数

        struct int_div {        // 构造一个可以使用"()"进行调用的函数对象类型
                float operator() (int x, int y) const { return ((float)x)/y; };
        };

        f = int_div();                    // 赋值
        cout<< f(5,3) <<endl;            // 通过函数对象进行调用
        std::accumulate(b, e, 1, f);        // 完美传递

成员函数可被看做是带有额外参数的自由函数,这个解释请看一下代码

 

   

        struct X {
                int foo(int);
        };

        function<int (X*, int)> f;      // 所谓的额外参数,就是成员函数默认的第一个参数,也就是指向调用成员函数的对象的this指针
        f = &X::foo;            // 指向成员函数

        X x;
        int v = f(&x, 5);            // 在对象x上用参数5调用X::foo()
        function<int (int)> ff = std::bind(f, &x, _1);    // f的第一个参数是&x
        v = ff(5);                // 调用x.foo(5)

function对于回调函数、将操作作为参数传递等十分有用。它可以看做是C++98标准库中函数对象mem_fun_t, pointer_to_unary_function等的替代品。同样的,bind()也可以被看做是bind1st()和bind2nd()的替代品, 当然比他们更强大更灵活

c++ 11新特性之bind()与function

标签:style   blog   color   io   使用   ar   sp   数据   div   

原文地址:http://www.cnblogs.com/20140930zn/p/4026497.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!