首页 > 其他分享 >function 和 bind 函数

function 和 bind 函数

时间:2023-06-25 16:49:00浏览次数:46  
标签:function std 函数 int bind add display

  • bind函数可以改变函数的形态
  • 例如:
  • void add (int x, int y) 的函数类型为void (int,int)。
  • 使用bind绑定一个元素bind(add, 1)后,变成void (int),其中x绑定为1。
  • 使用function类型接收bind的返回值
摘自cppreference(std::function)
 // 存储自由函数
    std::function<void(int)> f_display = print_num;
    f_display(-9);
 
    // 存储 lambda
    std::function<void()> f_display_42 = []() { print_num(42); };
    f_display_42();
 
    // 存储到 std::bind 调用的结果
    std::function<void()> f_display_31337 = [std::bind]
    f_display_31337();
 
    // 存储到成员函数的调用
    std::function<void(const Foo&, int)> f_add_display = &Foo::print_add;
    const Foo foo(314159);
    f_add_display(foo, 1);
    f_add_display(314159, 1);
 
    // 存储到数据成员访问器的调用
    std::function<int(Foo const&)> f_num = &Foo::num_;
    std::cout << "num_: " << f_num(foo) << '\n';
 
    // 存储到成员函数及对象的调用
    using std::placeholders::_1;
    std::function<void(int)> f_add_display2 = [std::bind]
    f_add_display2(2);
 
    // 存储到成员函数和对象指针的调用
    std::function<void(int)> f_add_display3 = [std::bind]
    f_add_display3(3);
 
    // 存储到函数对象的调用
    std::function<void(int)> f_display_obj = PrintNum();
    f_display_obj(18);
摘自cppreference(std::bind)
using namespace std::placeholders ;  // 对于 _1, _2, _3...
 
    // 演示参数重排序和按引用传递
    int n = 7;
    // ( _1 与 _2 来自 std::placeholders ,并表示将来会传递给 f1 的参数)
    auto f1 = std::bind(f, _2, 42, _1, std::cref(n), n);
    n = 10;
    f1(1, 2, 1001); // 1 为 _1 所绑定, 2 为 _2 所绑定,不使用 1001
                    // 进行到 f(2, 42, 1, n, 7) 的调用
 
    // 嵌套 bind 子表达式共享占位符
    auto f2 = std::bind(f, _3, std::bind(g, _3), _3, 4, 5);
    f2(10, 11, 12); // 进行到 f(12, g(12), 12, 4, 5); 的调用
 
    // 常见使用情况:以分布绑定 RNG
    std::default_random_engine e;
    std::uniform_int_distribution<> d(0, 10);
    std::function<int()> rnd = std::bind(d, e); // e 的一个副本存储于 rnd
    for(int n=0; n<10; ++n)
        std::cout << rnd() << ' ';
    std::cout<< '\n';
 
    // 绑定指向成员函数指针
    Foo foo;
    auto f3 = std::bind(&Foo::print_sum, &foo, 95, _1);
    f3(5);
 
    // 绑定指向数据成员指针
    auto f4 = std::bind(&Foo::data, _1);
    std::cout << f4(foo) << '\n';
 
    // 智能指针亦能用于调用被引用对象的成员
    std::cout << f4(std::make_shared<Foo>(foo)) << '\n'
              << f4(std::make_unique<Foo>(foo)) << '\n'

标签:function,std,函数,int,bind,add,display
From: https://www.cnblogs.com/skycrash/p/17494185.html

相关文章

  • BAPI函数
    以下是一些常见的MM模块中涉及的BAPI函数示例:BAPI_MATERIAL_GETLIST:获取物料清单。BAPI_MATERIAL_GETDETAIL:获取物料的详细信息。BAPI_MATERIAL_SAVEDATA:保存物料数据。BAPI_GOODSMVT_CREATE:创建物料库存移动。BAPI_GOODSMVT_GETDETAIL:获取物料库存移动的详细信息。BAPI_GO......
  • NumPy库及其常用函数举例
    NumPy库及其常用函数举例━━━━━━━━━━━━━━━━━━━━━━NumPy(NumericalPython)是Python中用于科学计算的一个重要库。它提供了高效的多维数组对象和对这些数组进行操作的函数。以下是一些常用的NumPy函数的示例:创建数组:numpy.array([1,2,3]):创建一个一维......
  • Matplotlib库及其常用函数举例
    Matplotlib库及其常用函数举例━━━━━━━━━━━━━━━━━━━━━━Matplotlib是一个Python的数据可视化库,可以用于创建各种类型的图表和图形。下面是一些常用函数的例子:绘制折线图:importmatplotlib.pyplotaspltx=[1,2,3,4,5]y=[1,4,9,16,25]p......
  • 【DataBase】SQL函数_ substr()函数
    substr()函数用于截取对应字段指定长度。SUBSTR(string,pos,len)string:指定字符串pos:规定字符串从何处开始,(这里的第一个位置是1而不是0)为正数时则从字段开始出开始,为负数则从结尾出开始。len:要截取字符串的长度。(是从1开始计数而不是0)  INSTR()......
  • 函数式接口和方法引用
    1. 概述   45只有一个抽象方法的接口我们称之为函数接口。 JDK的函数式接口都加上了**@FunctionalInterface** 注解进行标识。但是无论是否加上该注解只要接口中只有一个抽象方法,都是函数式接口。2. 常见函数式接口 2.1 Consumer 消费接口     46根据其中抽象方法的参......
  • go:(一)编程基础2:函数,结构,方法,接口
    引用:第9课:函数function?|课程列表|《Go编程基础(视频)》|Go技术论坛(learnku.com)1.函数: 闭包: defer匿名函数调用:如下例就是引用变量地址的情况,只有作为参数传入时才是值拷贝 recover使用: 2.结构: struct定义及变量初始化: 匿名结构及指针:嵌套匿......
  • 函数对象与闭包(笔记整理)
    一、函数对象1.什么是函数对象函数对象是指:将函数作为变量保存在内存中的一种对象。就是把函数当成变量去使用,就是在函数调用阶段,将调用的函数赋一个变量名definner():print('函数名也是不加括号,其实就是一个地址')#print(inner)#<functioninnerat0x7f80180......
  • candence计算器函数使用
    (91条消息)【工具小技巧】CadenceVirtuosoCalculatorFunctionPanel计算器函数功能介绍(持续更新……)_cadence计算器函数_喝喝喝水的博客-CSDN博客......
  • C语言中将二维数组作为函数参数来传递
    C语言中经常需要通过函数传递二维数组,有三种方法可以实现,如下:方法一,形参给出第二维的长度#include<stdio.h>voidfunc(intn,charstr[][5]){inti;for(i=0;i<n;i++)printf("/nstr[%d]=%s/n",i,str[i]);}voidmain(){char*p[3];charstr[]......
  • pybind11内嵌解释器
    一、创建解释器需要在使用任意PythonAPI前初始化解释器,包括pybind11Python函数和类。RAIIguard类`scoped_interpreter`可用来管理解释器的生命周期。在guard类销毁时,解释器将会关闭并占用的内存。必须在所有Python函数前调用它。#include<pybind11/embed.h>//everything......