c++ 11新特性之bind()与function
2014-10-15 15:46
531 查看
bind()和function() 这两个函数在std的标准库中,提供c++对函数以及对象的控制
bind() 顾名思义就是“绑定” ,而bind()是和函数有关,所以就是绑定某个函数,请看一下代码
我们无法使用bind()绑定一个重载函数的参数,我们必须显式地指出需要绑定的重载函数的版本
function() 是一个拥有任何可以以"(...)"符号进行调用的值的类型。特别地,bind的返回结果可以赋值给function类型。function十分易于使 用。(译注:更直观地,可以把function看成是一种表示函数的数据类型,就像函数对象一样。只不过普通的数据类型表示的是数据,function表 示的是函数这个抽象概念。),请看一下代码
成员函数可被看做是带有额外参数的自由函数,这个解释请看一下代码
function对于回调函数、将操作作为参数传递等十分有用。它可以看做是C++98标准库中函数对象mem_fun_t, pointer_to_unary_function等的替代品。同样的,bind()也可以被看做是bind1st()和bind2nd()的替代品, 当然比他们更强大更灵活
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 std::function std::bind使用
- C++ 11: function & bind 使用示例
- C++ 11 Lambda表达式、auto、function、bind、final、override
- C++ 11 Lambda表达式、auto、function、bind、final、override
- C++ 11 Lambda表达式、auto、function、bind、final、override
- C++ 11 std::function std::bind使用
- C++ 11: function,bind和lambda表达式
- C++ 11 std::function std::bind使用
- C++中std::tr1::function和bind 组件的使用
- [C/C++再探讨STL里的function和bind的实现
- c++中tr1::bind和tr1::function讲解
- C++ 11 新特性之 lambda表达式
- C++ 11 新特性
- Visual Studio 11开发者预览版本中的C++新特性(What's New for Visual C++ in Visual Studio 11 Developer Preview)
- C++ 11 笔记 (四) : std::bind
- C++ 类的成员函数指针 ( function/bind )
- C++中std::tr1::function和bind 组件的使用
- 【转】C++ function、bind以及lamda表达式
- C++ 11 新特性 Smart Pointer详细介绍