std::bind 成员函数到对象实例的快捷方式,无需绑定参数

2023-11-22

我有一个带有多个参数的成员函数。我想将其绑定到特定的对象实例并将其传递给另一个函数。我可以用占位符来做到这一点:

// actualInstance is a MyClass*
auto callback = bind(&MyClass::myFunction, actualInstance, _1, _2, _3);

但这有点笨拙 - 首先,当参数数量发生变化时,我也必须更改所有绑定调用。但此外,当我真正想要的是方便地创建一个包含对象引用的“函数指针”时,输入所有占位符是相当乏味的。

所以我希望能够做的是这样的:

auto callback = objectBind(&MyClass::myFunction, actualInstance);

有谁知道一些好方法来做到这一点?


我认为这会起作用:

template<typename R, typename C, typename... Args>
std::function<R(Args...)> objectBind(R (C::* func)(Args...), C& instance) {
    return [=](Args... args){ return (instance.*func)(args...); };
}

then:

auto callback = objectBind(&MyClass::myFunction, actualInstance);

注意:您需要重载来处理 CV 限定的成员函数。 IE:

template<typename R, typename C, typename... Args>
std::function<R(Args...)> objectBind(R (C::* func)(Args...) const, C const& instance) {
    return [=](Args... args){ return (instance.*func)(args...); };
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

std::bind 成员函数到对象实例的快捷方式,无需绑定参数 的相关文章

  • C++ 中本地类中的静态成员变量?

    我知道我们不能宣布static本地类中的成员变量 但其原因尚不清楚 那么请问有人可以解释一下吗 另外 为什么我们不能访问非static函数内部定义的变量 内部已经定义了局部类 直接在局部类成员函数中 在下面给出的代码中 int main i
  • 如何检查QProcess是否正确执行?

    QProcess process sdcompare QString command sdcompare QStringList args sdcompare command sdcompare diff args sdcompare lt
  • 启动时出现 OData v4 错误:找不到段“Whatever”的资源

    我正在构建新的 v4 服务 一切进展顺利 直到我为新模型 实体添加了新控制器 并在启动站点进行测试运行时收到此错误 控制器似乎编码正确 就像其他控制器一样 控制器 CustomersOData 中的操作 GetFeed 上的路径模板 Cus
  • 推导指南中的引用和值之间的差异

    考虑类型A template
  • 如何为 C 分配的 numpy 数组注册析构函数?

    我想在 C C 中为 numpy 数组分配数字 并将它们作为 numpy 数组传递给 python 我可以做的PyArray SimpleNewFromData http docs scipy org doc numpy reference
  • 单元测试一起运行时失败,单独运行时通过

    所以我的单元测试遇到了一些问题 我不能只是将它们复制并粘贴到这里 但我会尽力而为 问题似乎是 如果我一项一项地运行测试 一切都会按预期进行 但如果我告诉它一起运行测试 则 1 5 将通过 TestMethod public void Obj
  • 存储来自其他程序的事件

    我想将其他应用程序的事件存储在我自己的应用程序中 事件示例 打开 最小化 Word 或打开文件时 这样的事可能吗 运行程序 http msdn microsoft com en us library ms813609 aspx and 打开
  • 无法在 Windows 运行时组件库的 UserControl 中创建依赖项属性

    我想在用户控件内创建数据可绑定属性 这个用户控件包含一个 Windows 运行时组件 项目 我使用下面的代码来创建属性 public MyItem CurrentItem get return MyItem GetValue Current
  • 获取 WPF 控件的所有附加事件处理程序

    我正在开发一个应用程序 在其中动态分配按钮的事件 现在的问题是 我希望获取按钮单击事件的所有事件 因为我希望删除以前的处理程序 我尝试将事件处理程序设置为 null 如下所示 Button Click null 但是我收到了一个无法分配 n
  • 单击 form2 上的按钮触发 form 1 中的方法

    我对 Windows 窗体很陌生 我想知道是否可以通过单击表单 2 中的按钮来触发表单 1 中的方法 我的表格 1 有一个组合框 我的 Form 2 有一个 保存 按钮 我想要实现的是 当用户单击表单 2 中的 保存 时 我需要检查表单 1
  • 未定义的行为或误报

    我 基本上 在野外遇到过以下情况 x x 5 显然 它可以在早期版本的 gcc 下编译干净 在 gcc 4 5 1 下生成警告 据我所知 警告是由 Wsequence point 生成的 所以我的问题是 这是否违反了标准中关于在序列点之间操
  • 在一个字节中存储 4 个不同的值

    我有一个任务要做 但我不知道从哪里开始 我不期待也绝对不想要代码中的答案 我想要一些关于该怎么做的指导 因为我感到有点失落 将变量打包和解包到一个字节中 您需要在一个字节中存储 4 个不同的值 这些值为 NAME RANGE BITS en
  • 批量更新 SQL Server C#

    我有一个 270k 行的数据库 带有主键mid和一个名为value 我有一个包含中值和值的文本文件 现在我想更新表格 以便将每个值分配给正确的中间值 我当前的方法是从 C 读取文本文件 并为我读取的每一行更新表中的一行 必须有更快的方法来做
  • 如何使用 Mongodb C# 驱动程序连接多个集合

    我需要将 3 个集合与多个集合合并在一起 lookup我在 C 驱动程序中尝试过 它允许我 lookup用户采集但无法执行秒 lookup用于设置集合 有人可以帮忙吗 db Transactions aggregate lookup fro
  • 等待线程完成

    private void button1 Click object sender EventArgs e for int i 0 i lt 15 i Thread nova new Thread Method nova Start list
  • 私有模板函数

    我有一堂课 C h class C private template
  • std::async 与重载函数

    可能的重复 std bind 重载解析 https stackoverflow com questions 4159487 stdbind overload resolution 考虑以下 C 示例 class A public int f
  • 有人可以提供一个使用 Amazon Web Services 的 itemsearch 的 C# 示例吗

    我正在尝试使用 Amazon Web Services 查询艺术家和标题信息并接收回专辑封面 使用 C 我找不到任何与此接近的示例 所有在线示例都已过时 并且不适用于 AWS 的较新版本 有一个开源项目CodePlex http www c
  • 为什么在setsid()之前fork()

    Why fork before setsid 守护进程 基本上 如果我想将一个进程与其控制终端分离并使其成为进程组领导者 我使用setsid 之前没有分叉就这样做是行不通的 Why 首先 setsid 将使您的进程成为进程组的领导者 但它也
  • Server.MapPath - 给定的物理路径,预期的虚拟路径

    我正在使用这行代码 var files Directory GetFiles Server MapPath E ftproot sales 在文件夹中查找文件 但是我收到错误消息说 给定物理路径但虚拟路径 预期的 我对在 C 中使用 Sys

随机推荐

  • 从字符串 JavaScript 中提取数字

    有谁知道在 JavaScript 中从字符串中提取数字的方法吗 Example 1 banana 1 pineapple 3 oranges 我的目的是将结果保存在数组 JSON 或其他内容中 Result 1 1 3 var result
  • #define TRUE !FALSE 与 #define TRUE 1

    撇开自 c99 年以来的事实不谈stdbool h在定义宏来处理布尔类型时已经存在C以下有什么区别吗 define FALSE 0 define TRUE 1 Option 1 define TRUE FALSE Option 2 从这里的
  • JPA 使用父级合并但创建子级时如何获取生成的 id/对象?

    我有一个先前已被保留并具有 OneToMany与另一个实体的关系 为了添加新实体 我只需在托管对象中添加新实体并使用cascadeType ALL坚持改变 有没有一种方法可以获取新创建的对象的 id 或获取与合并一起使用的原始 非托管 对象
  • Spark SQL无法完成大量分片的Parquet数据写入

    我正在尝试使用 Apache Spark SQL 将 S3 中的 json 日志数据 etl 到 S3 上的 Parquet 文件中 我的代码基本上是 import org apache spark val sqlContext sql S
  • 机器学习奇/偶预测不起作用(50% 成功)

    我对机器学习非常陌生 我尝试创建一个模型来预测数字是否为偶数 我用了这个代码https machinelearningmastery com tutorial first neural network python keras 我根据自己的
  • 计算 MySQL 中每一行的 Z 分数? (简单的)

    我正在寻找一种有效的方法来为 MySQL 表中的每一行分配 Z 分数 也称为标准分数 Z Z Score X Actual value Mean value Standard Deviation I tried SELECT pTime M
  • 如何在 Entity Framework 6 DbContext.Database.BeginTransaction 中配置事务超时?

    使用类似的代码 using var tran Ctxt Database BeginTransaction 如何设置事务超时值 如果出于某种原因您需要自己管理交易 那么使用起来会更容易交易范围 它有几个构造函数接受TimeSpan参数来设置
  • Distinct() 方法是否保持序列的原始顺序不变?

    我想从列表中删除重复项 而不更改列表中唯一元素的顺序 Jon Skeet 和其他人建议使用以下内容 list list Distinct ToList 参考 如何从 List 中删除重复项 从 C 中的 List 中删除重复项 是否保证唯一
  • 使用 scipy curve_fit 通过两个数据点拟合指数函数

    我想拟合一个指数函数y x pw有一个常数pw拟合两个数据点 这scipy curve fit功能应该优化adj1 and adj2 我已尝试使用下面的代码 但无法使其工作 曲线不穿过数据点 我该如何修复它 import numpy as
  • 向后读取文件?

    有没有一种方法可以逐行向后读取文件 而不必从头开始向后读取文件 Use a 内存映射文件并向后走 操作系统将以相反的顺序对文件的所需部分进行分页
  • 使 Django 的 login_required 成为默认值的最佳方法

    我正在开发一个大型 Django 应用程序 其中绝大多数需要登录才能访问 这意味着我们在整个应用程序中都洒满了 login required def view 很好 而且效果很好只要我们记得在各处添加它 可悲的是 有时我们会忘记 而且失败往
  • WCF 服务通过 https 返回 404,但不通过 h​​ttp 返回 404

    我正在将现有服务从 HTTP 开发 UAT 迁移到 HTTPS 生产 但在配置方面遇到了问题 这是我的 web config 的 system serviceModel 部分
  • Java 中的 + 运算符对于数字和字符串的行为有何不同?

    Java没有运算符重载的概念 运算符的行为类似于数字的加法运算符和字符串的连接运算符 这类似于运算符重载行为 那么 Java有运算符重载吗 它基本上是运算符重载 只是内置于语言中 Java 没有运算符重载的概念 是正确的 因为开发商不能重载
  • 时间戳末尾带有 .0

    我正在尝试在 AnnotatedTimeLine Google Chart 及其要求中放入一些时间戳 采用日期时间格式 当我重新格式化 为时间戳格式 从班级收到的字符串时 它会给出以下内容 2013 06 28 10 08 35 0 我想要
  • 通过 sys.modules 使虚拟包可用

    假设我有一个包 mylibrary 我想让 mylibrary config 可供导入 无论是作为动态创建的模块 还是从完全不同的位置导入的模块 然后基本上 安装 在 mylibrary 命名空间内 即 我这样做 import sys ty
  • 给定一个边界框和一条线(两个点),确定该线是否与该框相交

    给定一个边界框 其定义如下bounds min x y z bounds max x y z 以及 3D 空间中的两个点 表示为Vector3对象 如何确定两点所形成的线是否与边界框相交 这里有一个在线 C 实现 线盒交点 http www
  • JavaScript:更改嵌入标签的 src 属性

    我有以下场景 我向用户展示了来自服务器的一些音频文件 用户单击其中一个 然后最终对选定的文件夹和文件执行 onFileSelected 该函数的作用是更改嵌入对象的源 因此 在某种程度上 它是在接受所选文件并保存用户的选择之前对其进行的预览
  • 如何在 VSCode 中创建自定义命令?

    在 Emacs 中 我可以用 Lisp 语言创建函数并将它们放在 emacs文件 这些函数将成为可以从编辑器调用或绑定到按键的命令 就像任何其他内置命令一样 有没有办法在 VSCode 中做到这一点 注意 自定义命令需要能够调用其他命令 简
  • Java Math 类的本机代码

    我想知道是否有任何方法可以访问 Math 类的本机代码 更具体地说 我需要查看 sin 方法的代码 这取决于实现 如文档中所述java lang Math 与类的一些数字方法不同StrictMath 类的等效函数的所有实现Math未定义为返
  • std::bind 成员函数到对象实例的快捷方式,无需绑定参数

    我有一个带有多个参数的成员函数 我想将其绑定到特定的对象实例并将其传递给另一个函数 我可以用占位符来做到这一点 actualInstance is a MyClass auto callback bind MyClass myFunctio