zoukankan      html  css  js  c++  java
  • c++11: bind用法

    原型:

    templateclass 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 << '
    ';
    }
     
    int g(int n1)
    {
        return n1;
    }
     
    struct Foo {
        void print_sum(int n1, int n2)
        {
            std::cout << n1+n2 << '
    ';
        }
        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) << '
    ';
  • 相关阅读:
    物料清单概述
    java开发webservice的1种方式
    java web service简单示例
    IOS证书过期
    Windows 2012 R2 安装net4.6.1
    sqlserver 性能调优脚本
    solidty--owner.sol
    ERC20-USDT
    EOS 公开节点及自有节点部署
    微信第三方平台授权流程
  • 原文地址:https://www.cnblogs.com/457220157-FTD/p/4019034.html
Copyright © 2011-2022 走看看