在一个类中使用带有成员函数的通用 std::function 对象

2023-12-14

对于一个类,我想将一些指向同一类的成员函数的函数指针存储在一个类中map储存std::function对象。但我一开始就失败了这段代码:

#include <functional>

class Foo {
    public:
        void doSomething() {}
        void bindFunction() {
            // ERROR
            std::function<void(void)> f = &Foo::doSomething;
        }
};

我收到error C2064: term does not evaluate to a function taking 0 arguments in xxcallobj结合一些奇怪的模板实例化错误。目前我正在使用 Visual Studio 2010/2011 在 Windows 8 上工作,在使用 VS10 的 Win 7 上也失败了。该错误必须基于一些我不遵循的奇怪的 C++ 规则


必须使用对象来调用非静态成员函数。也就是说,它总是隐式传递“this”指针作为其参数。

因为你的std::function签名指定您的函数不接受任何参数(<void(void)>), 你必须bind第一个(也是唯一的)参数。

std::function<void(void)> f = std::bind(&Foo::doSomething, this);

如果你想绑定一个带有参数的函数,你需要指定占位符:

using namespace std::placeholders;
std::function<void(int,int)> f = std::bind(&Foo::doSomethingArgs, this, std::placeholders::_1, std::placeholders::_2);

或者,如果您的编译器支持 C++11 lambda:

std::function<void(int,int)> f = [=](int a, int b) {
    this->doSomethingArgs(a, b);
}

(我手头没有支持 C++11 的编译器现在,所以我无法检查这个。)

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

在一个类中使用带有成员函数的通用 std::function 对象 的相关文章

  • 即使我没有#include ,为什么仍然可以使用 std::max 和 std::min ?

    include
  • 将数据集导出到 EXCEL

    我使用以下代码将数据库表中的字段导出到 Excel 中 我想要做的是能够编写一条 SQL 语句从多个表中检索字段并将其导出到 Excel 中 这段代码只允许我导出一张表 另外 如何显示保存提示对话框 示例代码将不胜感激 非常感谢 prote
  • 实体框架 - 循环更新属性

    我正在尝试找到一种方法来循环 EF 对象的属性并更新这些属性的值 更具体地说 我有 50 个字段 其中最多填充 50 个下拉列表 所有 50 个可能都需要填充 也可能不需要填充 为了解决这个问题 我有一个中继器 最多可以创建 50 个 DD
  • 每个 CPU 核心处于 C0 电源状态的时间

    任何帮助弄清楚如何做到这一点都会很棒 在过去一秒内 每个 CPU 核心处于 C0 电源状态的时间有多少 这是针对 Mac 应用程序的 因此需要 Objective C cocoa 和 c OS X 没有任何公开 CPU c 状态的 API
  • 将数组从 C# 编组到 C++ 并返回:PInvokeStackImbalance

    我有一个 C 函数 我想从 C 访问它 问题是我不断收到 PInvokeStackImbalance 异常 但我不知道为什么 当检查异常被关闭时 一切都运行良好并且符合预期 我的 C 函数的签名是 extern C double solve
  • C# - 如何将 IntPtr 缓冲区数据保存到文件(最快的方法)?

    我使用此代码将非托管代码中的 IntPtr 缓冲区中的字节保存到文件中 这是一个简单的回调函数 private void callback IntPtr buffer int length byte bytes new byte lengt
  • 在 C 程序中追踪数组越界访问/写入的推荐方法

    考虑用 C 语言编写一些不太明显的算法的实现 例如 让它成为递归快速排序 我在 K N King 的 C 编程 现代方法 第二版 书中找到了它 可以从here http knking com books c2 programs qsort
  • 使用 Thread.Sleep() 时,异步编程如何与线程一起工作?

    假设 前言 在之前的问题中 我们注意到Thread Sleep阻塞线程参见 什么时候使用Task Delay 什么时候使用Thread Sleep https stackoverflow com questions 20082221 whe
  • 是否可以用 C# 为 Android 编写应用程序?

    我们都知道Android运行Dalvik VM程序 通常开发人员用 Java 编写程序并将其编译为 Dalvik 字节码 我想知道是否有可能创建一个可以接受 C 代码并将其编译为 Dalvik 字节码的编译器 嗯 这是一种选择 或者您可以在
  • 我应该使用函数还是无状态函子?

    这两段代码做同样的事情 如您所见 它将用于排序函数 哪个更好 我通常写后一种 但我看到一些程序员像以前那样做 struct val lessthan binary function
  • 平衡两轮机器人而不使其向前/向后漂移

    我正在尝试设计一个控制器来平衡 2 轮机器人 约 13 公斤 并使其能够抵抗外力 例如 如果有人踢它 它不应该掉落 也不应该无限期地向前 向后漂移 我对大多数控制技术 LQR 滑模控制 PID 等 都很有经验 但我在网上看到大多数人使用 L
  • 让 WIX 在项目中包含引用

    我对 WiX 和设置自定义安装程序完全陌生 所以我对问题的主题表示歉意 我有一个内部业务应用程序 日记 它构建并运行良好 因此我按照教程 官方文档添加 WiX 项目并引用日记的 csproj 然后构建并运行这个最基本版本的 WiX 安装程序
  • Boost async_write问题

    我将展示一些代码 void wh const boost system error code ec std size t bytes transferred std cout lt lt test int main int argc cha
  • Parallel.For 和 Break() 误解?

    我正在研究 For 循环中的并行性中断 看完之后this http tipsandtricks runicsoft com CSharp ParallelClass html and this http reedcopsey com 201
  • 允许 .NET WebApi 忽略 DOCTYPE 声明

    我正在尝试通过 WebApi 方法将 XML 反序列化为对象 我有以下课程 XmlRoot IsNullable false public class MyObject XmlElement Name public string Name
  • 修改公共属性的访问修饰符是否是重大更改?

    如果我将公共属性的 setter 的访问修饰符从私有更改为公共 是否会导致引用它的其他程序集发生任何重大更改 UPDATE 这个问题是我 2012 年 1 月博客的主题 https ericlippert com 2012 01 09 ev
  • #define, #ifdef #undef #endif

    我有以下代码 define PROC ADD void main void while 1 ifdef PROC ADD Do this code here then undefined it to run the code in the
  • 更新插入 MongoDB 时如何防止出现“_t”字段?

    我有一个应用程序 它使用 MongoDB 的 C 驱动程序将 Upsert 插入 MongoDB 数据库 当我打电话给Update函数 我无法指定我要更新的类型 然后 t字段插入元素的类型 这是我用来更新插入的代码 collection U
  • lambda 表达式是多线程的吗?

    lambda 表达式是多线程的吗 假设当你将数学公式编写为 lambda 方法时 当你将其传递给另一个方法时 它会是多线程的吗 不是100 清楚你问的是什么 您是否想问 lambda 是否自然地在不同的线程上运行 如果是这样 则它们只是 S
  • 在 WPF 树视图中获取 FullPath?

    如果我以编程方式创建 WPF TreeView 例如 TreeView treeView lt added in the designer TreeViewItem rootNode new TreeViewItem rootNode He

随机推荐

  • 如何在java中使用fiddler捕获https

    我正在 Eclipse IDE 中运行以下 java 程序 import java net import java io public class HH public static void main String args throws
  • 默认整数值是什么?

    我在某处读到默认浮点值 例如1 2 are double not float 那么默认整数值是多少6 他们是short int or long 以 10 为基数给出的整数文字类型是以下列表中其值可以容纳的第一个类型 int long int
  • Spidermonkey 上的垃圾收集器问题...JS_AnchorPtr()?

    我推出了自己的 javascript 服务器端语言 称为 bondi 最近刚刚升级到新的蜘蛛猴 现在JS进入本地根和离开本地根的功能从1 8 5 api中消失 无用了 只使用锚点指针就足够了 JS AnchorPtr varname 在函数
  • Jasper Reports 中的子报表

    我有两个表格要打印在同一页上 这些表的数据将从自定义数据源的地图中提供 我需要实施它 我用谷歌搜索来实现这个任务 当时我遇到了子报告的概念 但我没有得到太多关于如何实现子报告的信息 我知道如何创建子报告 但我不知道如何使用自定义数据源填充子
  • jQuery UI 滑块 -> 支持鼠标滚轮?

    你可能已经知道我是 jQuery 的新手 所以不属于这个主题的代码改进仍然是非常允许的 这是我的 HTML 代码 div style display inline block width 120px div Bananas br div d
  • jasypt-spring-boot-1.17:属性解密失败,请确保加密/解密密码匹配

    我有 jasypt spring boot 1 17 带有 spring 版本 4 2 5 RELEASE 和 spring Boot 版本 1 5 3 RELEASE 我正在使用该网站的第一种方法 https github com uli
  • JavaScript 中同一行的多个比较/赋值运算符

    function test input var value input 1 在上面 函数内部的代码行在做什么以及它是如何工作的 首先是进行比较input 1 然后分配其结果 这将是true or false 变量value The is a
  • 如何自定义 HTML5 日期选择器

    我试图了解如何以特定方式自定义 HTML5 日期选择器 特别是格式类似于 日历图标 8 月 31 日 星期二右侧插入符号将打开日期选择器 经过一些初步搜索后 我找到了这些用于自定义日期输入文本框的伪元素 webkit datetime ed
  • c++ - FreeImage+OpenCV - 16 位图像扭曲

    我正在尝试加载图像 因为我必须对其应用算法 如果我加载每通道 8 位图像 则没有问题 但如果我加载 16bpc 图像 则会 毁掉 不幸的是 由于我没有足够的声誉 我无法上传图像 这些是它们的链接 源和 8bpc 处理结果 http post
  • 了解为什么 onCreateOptionsMenu 不显示菜单

    我正在阅读 Android For Dummies 一个例子使用了 onCreateOptionsMenu 我添加了一条日志消息 Override public boolean onCreateOptionsMenu Menu menu s
  • 字典递归比较程序

    我创建了一个程序来比较两个 python 字典并输出两者的差异 它适用于深度为 2 或更小的字典 我应该怎么做才能处理更深度的字典以及嵌套的字典 我遇到的另一个问题是 当我通过 get json 函数传递 json 数组时 它会作为列表返回
  • 使用 DirectShow 过滤器进行编码

    我正在努力将原始图像编码为 Windows 上的 avi 文件 可能使用 directshow 过滤器 使用的编解码器类型将由用户选择 我已经使用 Windows 视频 VFW 做了类似的事情 这很漂亮 因为它提供了简单的 api 来压缩数
  • 使用子进程时如何在 Python 中复制 tee 行为?

    我正在寻找一个 Python 解决方案 它允许我将命令的输出保存在文件中 而不将其从控制台隐藏 仅供参考 我问的是tee 作为 Unix 命令行实用程序 而不是 Python intertools 模块中的同名函数 Details Pyth
  • 展示 SkScene 中的另一个视图控制器

    我正在尝试展示另一个viewController来自我的 SkScene 这是我的主要viewController tuViewController Code void openTweetSheet FacebookLikeViewDemo
  • 打开拨号盘以拨打用户想要的号码

    我想在用户单击通话按钮时打开拨号盘 然后用户输入电话号码并拨打它 我知道我们可以这样打电话 UIApplication sharedApplication openURL NSURL URLWithString telprompt 2135
  • 如何在 Markdown pandoc 中打破长头线?

    在这个降价代码中 This a very long line header which was written in markdown 我想将长行分成两行 但保持标题的样式 这是错误的意图 This a very long line hea
  • 如何在 Ruby 中使用 mechanize 填写登录表单?

    下面是我希望用机械化填写的表格 已经尝试过常用的模型 例如 使用 Ruby 和 Mechanize 填写远程登录表单之谜 但没有成功
  • 如何使用链接按钮打开新选项卡?

    我正在使用一个linkbutton在一个gridview控件 我想将数据打开到新选项卡中 我尝试设置target blank 但它不起作用 我尝试过这样做 这是我的源代码
  • WCF 用户名身份验证:我可以在自定义 ServiceAuthorizationManager 中获取用户名吗?

    我有一个使用自定义的 WCF 服务ServiceAuthorizationManager 自定义身份验证管理器已设置为处理 Windows 和表单身份验证 但是 如果我连接的客户端设置为UserNameauth 我似乎无法在任何地方找到用户
  • 在一个类中使用带有成员函数的通用 std::function 对象

    对于一个类 我想将一些指向同一类的成员函数的函数指针存储在一个类中map储存std function对象 但我一开始就失败了这段代码 include