c++11: bind用法

原型:

template< class R, class F, class... Args >

bind( F&& f, Args&&... args );

bind函数模板的作用是:

The function template bind generates a forwarding call wrapper for f. Calling this wrapper is equivalent to invoking with some of its arguments bound to args.

不怎么好翻译,尝试解释一下:我们为某个函数做一个bind,然后调用该bind和调用函数是一样的,跟函数指针有点像。

#include <random>
#include <iostream>
#include <memory>
#include <functional>

void f(int n1, int n2, int n3, const int& n4, int n5)
{
    std::cout << n1 << ‘ ‘ << n2 << ‘ ‘ << n3 << ‘ ‘ << n4 << ‘ ‘ << n5 << ‘\n‘;
}

int g(int n1)
{
    return n1;
}

struct Foo {
    void print_sum(int n1, int n2)
    {
        std::cout << n1+n2 << ‘\n‘;
    }
    int data = 10;
};

int main()
{
    using namespace std::placeholders;  // for _1, _2, _3...

    // demonstrates argument reordering and pass-by-reference
    int n = 7;
    // (_1 and _2 are from std::placeholders, and represent future
    // arguments that will be passed to f1)
    auto f1 = std::bind(f, _2, _1, 42, std::cref(n), n);
    n = 10;
    f1(1, 2, 1001); // 1 is bound by _1, 2 is bound by _2, 1001 is unused

    // nested bind subexpressions share the placeholders
    auto f2 = std::bind(f, _3, std::bind(g, _3), _3, 4, 5);
    f2(10, 11, 12);

    // bind to a member function
    Foo foo;
    auto f3 = std::bind(&Foo::print_sum, &foo, 95, _1);
    f3(5);

    // bind to member data
    auto f4 = std::bind(&Foo::data, _1);
    std::cout << f4(foo) << ‘\n‘;
时间: 2024-10-08 20:12:48

c++11: bind用法的相关文章

2 bind用法详解

这一篇讲讲bind,话说bind-function技术有一段时间很潮啊,扬言分分钟灭掉面向对象编程妥妥的,让四人帮的设计模式再也无用武之地,其实听到这个消息我非常的郁闷,因为设计模式我还没有怎么学会,就眼看要被淘汰了啊.所以我们现在看看bind-function的用法吧,我用的是C++11中,std的bind而不是boost的bind.一,可调用对象C++中有一个概念叫做可调用对象,让截然不同的概念,加个括号,填写参数就能够统一使用,真是让人震惊了.比如在加个括号,填写参数后,1,函数指针,相当

C++ Primer 学习笔记_25_类与数据抽象(11)--const 用法小结、static与const以及static const(const static)

一.const 用法总结 1.可以对const 的用法做个小总结: const int n = 100;  //定义常量 const Test t(10); const int & ref = n;   //const引用 int& ref = n;  //Error [const与指针] const int* p; //const出现在*前面,表示*p是常量 (*p = 200; //Error) int * const p2;  //const出现在*后面,表示p2是常量 (p2 =

C++11 function用法 可调用对象模板类

std::function<datatype()> ()内写参数类型 datatype 代表function的返回值 灵活的用法.. 代码如下 1 #include <stdio.h> 2 #include <iostream> 3 #include <map> 4 #include <functional> 5 #include <stdlib.h> 6 using namespace std; 7 8 // 普通函数 9 int

c++ 11 bind function

Year 2011陈 良乔C++11 FAQ std::function 和 std::bind 标准库函数bind()和function()定义于头文件中(该头文件还包括许多其他函数对象),用于处理函数及函数参数.bind()接受一个函数(或者函数对象,或者任何你可以通过”(…)”符号调用的事物),生成一个其有某一个或多个函数参数被“绑定”或重新组织的函数对象.(译注:顾名思义,bind()函数的意义就像它的函数名一样,是用来绑定函数调用的某些参数的.)例如: int f(int, char,

php中Closure::bind用法(手册记录)

手册中 Closure::bind — 复制一个闭包,绑定指定的$this对象和类作用域. 具体参数可以看手册,这里记录下这个方法的实际用处. 1 <?php 2 3 trait MetaTrait 4 { 5 private $methods = []; 6 7 public function addMethod($methodName,$methodCallable) 8 { 9 if (!is_callable($methodCallable)) 10 throw new InvalidA

C++11 bind的初步了解

bind是一个C++11的一个标准库函数,它的定义在functional中.可以将bind看作一个通用的函数适配器,他接受一个可调用的对象,生成一个新的可调用对象来'适应对象参数列表. 调用bind的一般形式为: auto newCallable = bind(callale,arg_list); 其中,newCallable本身是一个可调用的对象,arg_list是一个逗号分割的参数列表,对应给定的callable的参数.即,当我们调用newCallalbe的时候,会调用callable,并传

C++11 bind

#include <iostream> #include <functional> using namespace std; int func(int a, int b) { return a + b; } class foo { public: int func(int a, int b) { return a + b; } }; int main() { auto bf1 = std::bind(func, 10, std::placeholders::_1); cout<

[已解决] MyBatis 中bind用法

JAVA: TC_ENTR_FLOW selectFlowForUpdate(String ENTR_ID); XML: <select id="selectFlowForUpdate" resultMap="BaseResultMap" parameterType="java.lang.String"> <bind name="ENTR_ID" value="'%' + _parameter&qu

sbt assembly 0.11.2 用法

1. 在 intellij idea 的 project[xxx-build]/project/plugins.sbt 下添加 addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.11.2") 最新的版本是 13.0.0,assembly.sbt 和 build.sbt 写到了一起,我觉得有点乱,还不如 0.11.2 清晰,明白 2.