bind详解

2023-11-01


  如果你还在使用bind1st / bind2nd,那么恐怕已经out了,Boost提供了更强大的武器bind,用于函数对象的绑定;
  bind接受的第一个参数必须是可调用对象f,包括函数、函数指针、函数对象、成员函数,之后最多可以接受9个参数,参数的数量必须与f的参数数量相等,这些参数将会作为f函数的参数。
  bind会返回一个函数对象,它内部保存了f的拷贝,当发生调用时,之前参数将传给f函数完成调用。

bind与占位符

  bind与占位符可以很好地配合,占位符被定义为_1、_2一直到_9,占位符可以取代参数的位置,知道调用时菜接受真正的参数,占位符的名字表示它在调用式中的位置,但在绑定时则没有顺序要求,_1不一定第一个出现,也不一定只出现一次,例如:

bind(func,_2,_1)(a1,a2)  //等价于func(a2,a1)

  但需要注意:如果f只有两个参数,_3绝对不能出现。
  当然,不使用占位符也是可以的,bind绑定实参,那么此时bind返回的相当于是个常数。

绑定普通函数

  示例如下:

int f(int a,int b)
{return a+b;}

typedef int(*f_type)(int,int);

bind(f,_1,9)(x);    //f(x,9)
bind(f,_1,_2)(x,y); //f(x,y)
bind(f,_2,_1)(x,y); //f(y,x)
bind(f,_1,_1)(x,y); //f(x,x),y被忽略

f_type pf = f;
bind(pf,_1,9)(x); //(*pf)(x,9) //绑定函数指针

绑定成员函数

  bind绑定成员函数时与绑定普通函数略有不同,主要在于,用户必须提供一个类的实例、引用或者指针,毕竟,成员函数不能独立存在。我们可以像下面这样绑定成员函数:

bind(&x::func,x,_1,_2,...)

  其中,x就是类实例、引用或者指针,大多数情况下,我们可以使用this指针;需要注意的是:&x::func这种形式是不可变的,否则将会报错。
  更进一步,bind同样支持虚拟成员函数绑定,用法与非虚函数相同,虚函数的行为将由实际调用发生时的实例来决定。

绑定函数对象

  示例如下:

bind(std::greater<int>(),_1,10); //检查 X > 10
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

bind详解 的相关文章

  • InvalidOperationException - 对象当前正在其他地方使用 - 红十字

    我有一个 C 桌面应用程序 其中我连续创建的一个线程从源 实际上是一台数码相机 获取图像并将其放在 GUI 中的面板 panel Image img 上 这必须是另一个线程 如它是控件的代码隐藏 该应用程序可以工作 但在某些机器上 我会在随
  • 使用 std::packaged_task/std::exception_ptr 时,线程清理程序报告数据争用

    我遇到了线程清理程序 TSan 的一些问题 抱怨某些生产代码中的数据争用 其中 std packaged task 通过将它们包装在 std function 中而移交给调度程序线程 对于这个问题 我简化了它在生产中的作用 同时触发 TSa
  • 注销租约抛出 InvalidOperationException

    我有一个使用插件的应用程序 我在另一个应用程序域中加载插件 我使用 RemoteHandle 类http www pocketsilicon com post Things That Make My Life Hell Part 1 App
  • 如何在 .NET Framework 2.0 中模拟“Func<(Of <(TResult>)>) 委托”?

    我尝试使用这个类代码项目文章 http www codeproject com KB threads AsyncVar aspx在 VB NET 和 NET Framework 2 0 中 除了这一行之外 所有内容似乎都可以编译Privat
  • MVC 在布局代码之前执行视图代码并破坏我的脚本顺序

    我正在尝试将所有 javascript 包含内容移至页面底部 我正在将 MVC 与 Razor 一起使用 我编写了一个辅助方法来注册脚本 它按注册顺序保留脚本 并排除重复的内容 Html RegisterScript scripts som
  • ClickOnce 应用程序错误:部署和应用程序没有匹配的安全区域

    我在 IE 中使用 FireFox 和 Chrome 的 ClickOnce 应用程序时遇到问题 它工作正常 异常的详细信息是 PLATFORM VERSION INFO Windows 6 1 7600 0 Win32NT Common
  • 使用 Newtonsoft 和 C# 反序列化嵌套 JSON

    我正在尝试解析来自 Rest API 的 Json 响应 我可以获得很好的响应并创建了一些类模型 我正在使用 Newtonsoft 的 Json Net 我的响应中不断收到空值 并且不确定我的模型设置是否正确或缺少某些内容 例如 我想要获取
  • 单个对象的 Monogame XNA 变换矩阵?

    我读过一些解释 XNA Monogame 变换矩阵的教程 问题是这些矩阵应用于 SpriteBatch Begin matrix 这意味着所有 Draw 代码都将被转换 如何将变换矩阵应用于单个可绘制对象 就我而言 我想转换滚动背景 使其自
  • 使用接口有什么好处?

    使用接口有什么用 我听说它用来代替多重继承 并且还可以用它来完成数据隐藏 还有其他优点吗 哪些地方使用了接口 程序员如何识别需要该接口 有什么区别explicit interface implementation and implicit
  • 回发后刷新时提示确认表单重新提交。我做错了什么?

    我有一个以空白 默认状态启动的仪表板 我让用户能够将保存的状态加载到仪表板中 当他们单击 应用 按钮时 我运行以下代码 function CloseAndSave var radUpload find radUpload1ID var in
  • 将 Word 文档另存为图像

    我正在使用下面的代码将 Word 文档转换为图像文件 但是图片显得太大 内容不适合 有没有办法渲染图片或将图片保存到合适的尺寸 private void btnConvert Click object sender EventArgs e
  • 在 C 中初始化变量

    我知道有时如果你不初始化int 如果打印整数 您将得到一个随机数 但将所有内容初始化为零似乎有点愚蠢 我问这个问题是因为我正在评论我的 C 项目 而且我对缩进非常直接 并且它可以完全编译 90 90 谢谢 Stackoverflow 但我想
  • 从 Linux 内核模块中调用用户空间函数

    我正在编写一个简单的 Linux 字符设备驱动程序 以通过 I O 端口将数据输出到硬件 我有一个执行浮点运算的函数来计算硬件的正确输出 不幸的是 这意味着我需要将此函数保留在用户空间中 因为 Linux 内核不能很好地处理浮点运算 这是设
  • DbContext 和 ObjectContext 有什么区别

    From MSDN 表示工作单元和存储库模式的组合 使您能够查询数据库并将更改分组在一起 然后将这些更改作为一个单元写回存储 DbContext在概念上类似于ObjectContext 我虽然DbContext只处理与数据库的连接以及针对数
  • C# HashSet 只读解决方法

    这是示例代码 static class Store private static List
  • CMake 无法确定目标的链接器语言

    首先 我查看了this https stackoverflow com questions 11801186 cmake unable to determine linker language with c发帖并找不到解决我的问题的方法 我
  • C++ 函数重载类似转换

    我收到一个错误 指出两个重载具有相似的转换 我尝试了太多的事情 但没有任何帮助 这是那段代码 CString GetInput int numberOfInput BOOL clearBuffer FALSE UINT timeout IN
  • 如果没有抽象成员,基类是否应该标记为抽象?

    如果一个类没有抽象成员 可以将其标记为抽象吗 即使没有实际理由直接实例化它 除了单元测试 是的 将不应该实例化的基类显式标记为抽象是合理且有益的 即使在没有抽象方法的情况下也是如此 它强制执行通用准则来使非叶类抽象 它阻止其他程序员创建该类
  • WebSocket安全连接自签名证书

    目标是一个与用户电脑上安装的 C 应用程序交换信息的 Web 应用程序 客户端应用程序是 websocket 服务器 浏览器是 websocket 客户端 最后 用户浏览器中的 websocket 客户端通过 Angular 持久创建 并且
  • 我的班级应该订阅自己的公共活动吗?

    我正在使用 C 3 0 遵循标准事件模式我有 public event EventHandler

随机推荐

  • shell中常用的特殊符号

    在shell中常用的特殊符号罗列如下 39 string 39 string command xx yy zz lt gt 井号 comments 这几乎是个满场都有的符号 除了先前已经提过的 第一行 bin bash 井号也常出现在一行的
  • C++浮点数控制输出格式的方法

    控制浮点数输出格式需要包含iomanip头文件 所以在源代码中加上头文件 include
  • 关于wait until snap is fully seeded等原因导致的ubuntu引导无限期黑屏问题

    这个问题我找遍中外只有在一个老外的回复下看到过一点思路 黑屏的时候 立刻频繁切换f1 f2 f3控制台 直到f1 出现登陆界面 就可以了 当然 前提是你nomodeset 都弄过 攻克了这个汉比bug
  • 【动态规划】机器人路径规划——算法设计与分析慕课作业

    题目内容 一个机器人只能向下和向右移动 每次只能移动一步 设计一个算法求机器人从 1 1 到 m n 有多少条路径 输入格式 以空格分开m n 输出格式 路径条数 输入样例 4 5 输出样例 35 loc input split I表示行数
  • 蓝桥杯2022真题:裁纸刀、修剪灌木、刷题统计、纸张尺寸、数位排序、考勤刷卡、卡片、小平方、李白打酒加强版

    目录 1 裁纸刀 2 修剪灌木 3 刷题统计 4 纸张尺寸 5 数位排序 6 考勤刷卡 7 卡片 8 小平方 9 李白打酒加强版 1 裁纸刀 题目无法截图 看题点击 https www lanqiao cn problems sort st
  • 机器学习:利用神经网络实现简单的数字识别

    本学期的机器学习课程 作业参考了吴恩达大佬的手写数字识别实验 以下是完成的代码 import numpy as np import scipy io as sio from scipy optimize import fmin cg imp
  • 剖析:顺序表的增删改查

    目录 前言 一 什么是顺序表 1 1顺序表的两种形式 1 2动态顺序表 二 顺序表增删改查的接口实现 2 1结构体空间表示顺序表 2 2顺序表的初始化 2 2malloc新增空间 2 3增加元素 2 4删除元素 2 5查找元素 2 6指定位
  • 代码质量如何管控与提升

    开发团队代码质量如何做到管控与提升 我相信很多公司都会面临这样的问题 开发团队大人员技术水平参差不齐 代码写的不够规范 代码扫描问题修改太过滞后 代码库管理每个团队都不一致 偶尔还会合并丢失一些代码 code review费人费时效率不高
  • 前端必用正则(js)不间断更新```

    手机号 1 3 d 4 5 6 9 5 0 3 5 9 6 5 7 7 0 8 8 1 3 5 8 9 1 8 9 d 8 大写字母 A Z 日期 如 2019 07 10 d 4 d 1 2 1 d 1 2 email地址 w w w w
  • 【剑指offer-第二版】部分题目与解答【C++版本】

    20180612 求职在即 剑指offer 作为大家都推荐的一本应试宝典 确实也有刷一刷的必要 很多题目都比较经典 也涵盖了大多数的算法和数据结构 把自己刷题的过程做一个总结 权当是一个笔记 当前还处在未完成状态 希望自己能坚持做完 我自己
  • 仓位管理 – 2.实战篇

    上一篇 说到了仓位管理的重要性 这一篇则说明我对仓位控制算法的设计 以及最终使用的算法 由于内容较多 本文中我尽量只说重点 概念 算法 就是将一定可变范围内的一组输入条件 轮换到确定的输出时 所使用到的逻辑换算关系 仓位控制算法 其输入就是
  • study

    学习的博客地址 1 对自己python有帮助过的博客 http blog csdn net anbo724 article category 831447 另外有hadoop 等其他分类
  • 机器学习--人脸自动补齐(11)

    随机树ExtraTreeRegressor 分列点随机选取 不考虑信息增益 减少过拟合 获取一个对象所属的类名称 model class name import numpy as np import pandas as pd import
  • 肖臻老师区块链公开课笔记

    前段时间 区块链大火 出现了很多种基于区块链技术的政务应用 之前通过零散的网页信息和讲座 自我感觉理解了block chain原理 当看到各种区块链技术广泛应用时 自己以技术理解 反而对之不屑 当然 也怀疑自己还没有理解了区块链 带着这种好
  • 二、Flink使用异步算子请求高德地图获取位置信息

    目录 Flink异步算子使用介绍 Flink使用异步算子请求高德地图获取位置信息代码实现 相关阅读 Flink使用异步算子 线程池查询MySQL 1 概述 1 Flink异步算子使用介绍 1 异步与同步概述 同步 向数据库发送一个请求然后一
  • 一步步学习SPD2010--第二章节--处理SP网站(6)---- 探索SP网站

    SP技术没有一个界面 你可以通过使用Web浏览器或者兼容程序如Office 应用程序 包括SPD 你可以选择适合你必须完成的任务的接口 然而 根据你选择的程序 你可能有SP网站的不同视图 如果你使用MS Word 你只看到了网站和内容的一小
  • 爆肝整理 JVM 十大模块知识点总结,不信你还不懂

    01 JVM 内存结构 Java 虚拟机的内存空间分为 5 个部分 程序计数器 Java 虚拟机栈 本地方法栈 堆 方法区 JDK 1 8 同 JDK 1 7 比 最大的差别就是 元数据区取代了永久代 元空间的本质和永久 代类似 都是对 J
  • 【ESP32开发】——RGB LED灯(灯珠)点亮

    一 引言 本章内容主要介绍如何使用ESP32开发板点亮板载的RGB灯 使用的是ESP32 S3和ESP32 C3开发板 调用第三方库实现 由于网络上没有关于点亮ESP32板载RGB灯的资料 特此记录 二 ESP32 C3与ESP32 S3
  • python怎么批量处理数据_python操作数据之批量添加数据

    import pymysql import random import time from datetime import datetime type dict 测试01 001 测试02 002 测试03 003 测试04 004 fid
  • bind详解

    bind与占位符 绑定普通函数 绑定成员函数 绑定函数对象 如果你还在使用bind1st bind2nd 那么恐怕已经out了 Boost提供了更强大的武器bind 用于函数对象的绑定 bind接受的第一个参数必须是可调用对象f 包括函数