如何编写看起来像方法的 lambda 表达式?

2024-04-30

我一直在疯狂地试图解决这个问题。考虑以下代码(我假设已定义前向引用):

// Signature representing a pointer to a method call
typedef
   void (MyClass::*MyMethod)(int);

class MyClass
{
    MyClass();
    void method1(int i);
    void method2(int i);

    void associateMethod(int index, MyMethod m);
} 

鉴于上述情况,构造函数可以执行以下操作:

MyClass::MyClass()
{
   associateMethod(1, &MyClass::method1);
   associateMethod(2, &MyClass::method2);
}

但是,我希望能够调用“associateMethod”,其中第二个参数是匿名方法。但是,以下内容无法编译。

associateMethod(3, [this](int) -> void { /* some code here */ }

我收到一条错误消息,称它们无法从 lambda 到 MyMethod 进行可行的转换。

我想知道 lambda 语法是否需要在某处包含“MyClass”,但对 lambda 表达式进行随机猜测,例如

 MyClass::[this](int) -> void {}

or

 [this]&MyClass::(int) -> void {}

不要编译。

希望有任何指点(没有双关语)

Thanks


You can't convert a lambda expression to a class member function pointer and there's no valid syntax to make it look like one1.

您应该声明而不是原始函数指针MyMethod as std::function签名(如评论中提到的):

using MyMethod = std::function<void(int)>;

然后您可以使用 lambda 来初始化此参数:

MyClass::MyClass()
{
   associateMethod(1, [this](int a) { this->method1(a); });
   associateMethod(2, [this](int a) { this->method2(a); });
}

1)Lambda functions can be thought as compiler generated callable classes, which take the captures as parameters on construction and provide a operator()() overload with the parameters and body you specify. Hence there's no possible valid conversion to a raw or member function pointer.

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

如何编写看起来像方法的 lambda 表达式? 的相关文章

  • 编写此代码片段的有效方法是什么? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 更有效和 或更短地重写此代码以节省字节并显得不那么冗长的方法 if N 2 0 N 6 N 8 N 10 N 12 N 14 N 16 N
  • JSON.Net 反序列化返回“null”

    我正在使用 JSON Net 反序列化 JSON 字符串 JSON 字符串是 string testJson Fruits Apple color red size round Orange Pro
  • IEnumerable 的 String.Join(string, string[]) 的类似物

    class String包含非常有用的方法 String Join string string 它从数组创建一个字符串 用给定的符号分隔数组的每个元素 但一般来说 它不会在最后一个元素之后添加分隔符 我将它用于 ASP NET 编码 以用
  • 叮当错误?命名空间模板类的朋友

    以下代码在 clang 下无法编译 但在 gcc 和 VS 下可以编译 template
  • C 中“complex”的默认类型

    根据我读过的文档 C99 和更高版本的支持float complex double complex and long double complex作为复杂类型 但是 此代码在使用时编译时不会发出警告gcc Wall Wextra inclu
  • C++ 将联合强制转换为其成员类型之一

    以下对我来说似乎完全符合逻辑 但不是有效的 C 联合不能隐式转换为其成员类型之一 有人知道为什么不这样做的充分理由吗 union u int i char c function f int i int main u v v i 6 f v
  • 带有运算符语法的错误消息,但不带有函数语法的错误消息

    为什么我在调用 unary 时收到错误消息 使用运算符语法 如果我用函数语法调用它就可以了 现场演示 https godbolt org z j7AbeQ template
  • 为什么需要数字后缀?

    C 语言 我确信还有其他语言 需要在数字文字末尾添加后缀 这些后缀指示文字的类型 例如 5m是一个小数 5f是一个浮点数 我的问题是 这些后缀真的有必要吗 或者是否可以从上下文中推断出文字的类型 例如 代码decimal d 5 0应该推断
  • 如何使用 Roslyn 通过扩展方法、静态类中的方法以及带有 ref/out 参数的方法来访问调用

    我正在致力于创建一个开源项目 用于创建 NET UML 序列图 该项目利用名为 js sequence diagrams 的 javascript 库 我不确定 Roslyn 是适合这项工作的工具 但我想我应该尝试一下 所以我整理了一些概念
  • 如何使用递归查找数字中的最小元素 [C]

    好的 所以我正在准备我的 C 考试 当谈到递归时我有点卡住了我是大学一年级的学生 这对我来说似乎有点困难 练习要求在给定的数字中使用递归函数我需要找到最小的元素 例如 52873 是 2 程序需要打印 2 include
  • 如何在 C# 中获取 Json 数组?

    我有一个像这样的 Json 字符串 我想将它加载到 C 数组中 当我尝试这样做时 我收到异常 我的字符串 customerInformation customerId 123 CustomerName Age 39 Gender Male
  • 将错误代码映射到 C++ 中的字符串

    将错误代码从枚举映射到字符串的更有效方法是什么 在 C 中 例如 现在我正在做这样的事情 std string ErrorCodeToString enum errorCode switch errorCode case ERROR ONE
  • ALTER TABLE ... ADD CONSTRAINT 失败时将事务回滚到保存点

    有没有办法在事务中添加检查约束and如果失败回滚到以前的保存点 而不是回滚整个事务 就我而言 当 ALTER TABLE ADD CONSTRAINT 命令失败时 事务无法回滚到保存点 尝试这样做会引发 InvalidOperationEx
  • 浮点字节序?

    我正在为实时海上模拟器编写客户端和服务器 并且由于我必须通过套接字发送大量数据 因此我使用二进制数据来最大化可以发送的数据量 我已经了解整数字节顺序以及如何使用htonl and ntohl为了规避字节顺序问题 但我的应用程序与几乎所有模拟
  • 如何将 int 作为“void *”传递给线程启动函数?

    我最初有一个用于斐波那契变量数组的全局变量 但发现这是不允许的 我需要进行基本的多线程处理并处理竞争条件 但我无法在 pthread 创建中将 int 作为 void 参数提供 我尝试过使用常量指针 但没有成功 由于某些奇怪的原因 void
  • “必须声明标量变量”错误[重复]

    这个问题在这里已经有答案了 必须声明标量变量 Id SqlConnection con new SqlConnection connectionstring con Open SqlCommand cmd new SqlCommand cm
  • 如何在c linux中收听特定接口上的广播?

    我目前可以通过执行以下操作来收听我编写的简单广播服务器 仅广播 hello int fd socket PF INET SOCK DGRAM 0 struct sockaddr in addr memset addr 0 sizeof ad
  • 使用 C# 动态创建按钮并按预定义的顺序放置它们

    NET 4 5 C 创建 Windows 窗体 我想动态创建和添加按钮并为其分配单击事件 但希望它们以特定的方式动态放置 就像图像一样 我的问题是如何以上述方式动态放置按钮 即 4x4 格式 一行 4 个按钮 4 列 但行数不受限制 是否可
  • 如何提高环复杂度?

    对于具有大量决策语句 包括 if while for 语句 的方法 循环复杂度会很高 那么我们该如何改进呢 我正在处理一个大项目 我应该减少 CC gt 10 的方法的 CC 并且有很多方法都存在这个问题 下面我将列出一些例如我遇到的问题的
  • SQL Server“未找到网络路径”在不同环境中随机且不频繁地发生

    类似 如果不是同一个问题 随机遇到网络路径未找到异常 https stackoverflow com questions 38696448 network path not found exception encountered rando

随机推荐

  • 如何在 Laravel 中使用数据库进行邮件设置

    我想让用户远离编辑配置文件 所以我在管理面板中制作了 Web 界面 用于设置邮件服务器 用户名 密码 端口 加密 我在 Laravel 4 2 中工作得很好 但是现在当应用程序被重写为 Laravel 5 时 出现错误 Class Sett
  • 如何改变Flutter对话框的位置

    我创建了一个对话框 在注册新用户时 Firestore 中存在号码时会显示该对话框 然而 默认情况下 Android 似乎将对话框定位在显示屏的中央 有没有办法将对话框定位在其调用的小部件的位置 对于我的情况 它是 凸起 按钮回调 还想知道
  • 如何在matplotlib中制作具有不同y轴的堆积折线图?

    我想知道如何制作堆积折线图 该图将在 matplotlib 中采用不同的列 关键是当我们进行聚合时 我需要在两个不同的列上进行数据聚合 我想我需要制作一个用于绘图的大数据框 我没有找到更漂亮 更方便的方法来在 pandas matplotl
  • 使用 Google Calendar API 返回 401(未经授权)

    我尝试通过 JavaScript 使用 Google Calendar API 并在使用以下代码时不断收到 401 错误响应 ajax dataType json url https www googleapis com calendar
  • 如何在 HTML 5 Web Worker 中访问 jQuery

    我无法在 HTML5 中访问 jQuery网络工作者 https en wikipedia org wiki Web worker 我有办法做到这一点吗 长话短说 包括这个脚本 http fel 8u cz workerrjs main w
  • 检索 arangodb 中没有链接边的顶点

    检索相关edge collection中没有边的所有顶点的最佳方法是什么 我尝试使用以下代码 但自 arangodb 2 8 以来 它变得非常慢 在以前的版本中并不是很快 但比现在快了大约 10 倍 对于大约 1000 个边和大约 3000
  • 将非泛型类扩展为泛型类

    org apache commons collections buffer 包中的 Java 类 CircularFifoBuffer 是非泛型的 可以存储任何类的对象 我想创建一个通用版本 它只能保存类 T 的对象 我的第一个想法是扩展
  • 为什么我可以通过带有太多参数的指针调用函数?

    假设我有这个功能 int func2 printf func2 n return 0 现在我声明一个指针 int fp double 这应该指向一个函数 该函数需要double参数并返回一个int func2没有任何论点 但当我写时仍然 f
  • str.isdecimal() 和 str.isdigit() 区别示例

    阅读 python 文档我了解到 isdecimal 和 isdigit 字符串函数 但我没有发现文献对它们的可用区别太清楚 有人可以向我提供这两个函数的区别的代码示例吗 类似行为 gt gt gt str isdecimal 1 True
  • DHCP 服务器将任何 url 重定向到登陆页面

    我有一个 Linux DHCP 服务器 我需要将所有网络流量重定向到一个登陆页面 该页面将包含有关如何在网络上注册计算机的说明 无论用户输入什么 URL 都需要将用户重定向到网页 在 DHCP 服务器上 即 用户输入 google com
  • 具有模板的 C++ 类找不到其构造函数

    我有一个问题我不太明白 我有一个节点类 template
  • CSS 背景图像尺寸过渡

    我正在研究一个简单的标记 可以调整 div 背景图像的大小 看小提琴 http jsfiddle net zeYZL http jsfiddle net zeYZL 我需要使用简单的 CSS 过渡来为其设置动画 我尝试这样做 tile ho
  • 如何阻止远程表单提交?

    我有一个可以远程和正常使用的表格 form for comment html class comment form remote request xhr do f f text area body f submit 我希望仅在以下情况下提交
  • 如何将“原始”字符串转换为普通字符串? [复制]

    这个问题在这里已经有答案了 在Python中 我有一个像这样的字符串 x89 n 如何将其解码为普通字符串 例如 x89 n 如果您的输入值为str字符串 使用codecs decode 转换 import codecs codecs de
  • 有 PayPal IPN 的示例吗

    我有一个 Asp Net WEB API 2 项目 我想实现一个即时付款通知 IPN 侦听器控制器 我找不到任何示例和 nuget 包 我所需要的只是确认用户使用 Paypal 上的标准 html 按钮付款 这很简单 所有 nuget 包都
  • 初始化列表中的依赖关系

    这种行为定义明确吗 class Foo int A B public Foo int Bar B Bar A B 123 int main Foo MyFoo 0 return 0 不 它是未定义的 A将首先初始化 它是类定义中的第一个 并
  • 博客的 mongodb 架构设计

    您将如何为具有基于文档的数据库 mongodb 的类似博客的网站设计架构 该站点具有以下对象 用户 文章 评论 用户可以向文章添加评论 每个用户还可以为每个评论投票一次 我希望能够有效地执行这些查询 1 获取文章A 文章A的评论以及每个评论
  • 从 R 中的选项卡式文本创建树形图

    我想制作以下数据的树 流程图 并用制表符正确缩进 Vertebrates fish goldfish clownfish amphibian frog toad reptiles snake lizard turtle tortoise b
  • python kivy在矩形内添加文本

    如何在矩形内添加文本 我使用下面的代码并在画布内添加了一个标签 希望它能显示在矩形内 import kivy from kivy app import App from kivy uix anchorlayout import Anchor
  • 如何编写看起来像方法的 lambda 表达式?

    我一直在疯狂地试图解决这个问题 考虑以下代码 我假设已定义前向引用 Signature representing a pointer to a method call typedef void MyClass MyMethod int cl