Lambda表达式可以降级到C++ 98吗

2023-12-01

我最近遇到一个问题,需要将用 lambda 表达式编写的 C++ 11 代码集成到仅支持 C++ 98 编译器的旧代码库。我发现了 lambda 的几个可能的等价物,例如宏、函子或函数指针。但在用 capture 翻译 lambda 时,它们似乎都受到限制。例如一个带有回调的简单通用函数:

template <class Fn>  
void ForEachObject(Fn fn)  
{  
    for (uint i = 0; i < objectCount; i++)  
    {  
        fn(i, address + i * objectSize);  
    }  
}

典型的调用者会做类似的事情:

uint attributes = 0x0030;
....
ForEachObject([=](uint index, void * objectAddress)
{
    if ((ObjectInfo(index) & attributes) != 0)
    {
        fn(index, objectAddress);
    }
});

注意这里的属性超出了 lambda 的范围。无论如何,是否仍然可以在没有 lambda 的情况下重用每个逻辑?或者我必须重新编写每个此类调用者的逻辑?


与函子:

struct Functor
{
    explicit Functor(uint attributes) : attributes(attributes) {}
    void operator () (uint index, void * objectAddress) const
    {
        if ((ObjectInfo(index) & attributes) != 0)
        {
            fn(index, objectAddress);
        }
    }
    uint attributes;
};

然后打电话

uint attributes = 0x0030;
// ....
ForEachObject(Functor(attributes));

对于每个不同的 lambda,您必须编写一个函子。 你不必修改ForEachObject

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

Lambda表达式可以降级到C++ 98吗 的相关文章

  • 检查两个数是否是彼此的排列?

    给定两个数字 a b 使得 1 例如 123 是 312 的有效排列 我也不想对数字中的数字进行排序 如果您指的是数字的字符 例如 1927 和 9721 则 至少 有几种方法 如果允许排序 一种方法是简单地sprintf将它们放入两个缓冲
  • 如何检查图像对象与资源中的图像对象是否相同?

    所以我试图创建一个简单的程序 只需在单击图片框中更改图片即可 我目前只使用两张图片 所以我的图片框单击事件函数的代码 看起来像这样 private void pictureBox1 Click object sender EventArgs
  • 如何使 Windows 窗体的关闭按钮不关闭窗体但使其不可见?

    该表单有一个 NotifyIcon 对象 当用户单击 关闭 按钮时 我希望表单不关闭而是变得不可见 然后 如果用户想再次查看该表单 可以双击系统托盘中的图标 如果用户想关闭表单 可以右键单击该图标并选择 关闭 有人可以告诉我如何使关闭按钮不
  • pthread_cond_timedwait() 和 pthread_cond_broadcast() 解释

    因此 我在堆栈溢出和其他资源上进行了大量搜索 但我无法理解有关上述函数的一些内容 具体来说 1 当pthread cond timedwait 因为定时器值用完而返回时 它如何自动重新获取互斥锁 互斥锁可能被锁定在其他地方 例如 在生产者
  • 当 contains() 工作正常时,xpath 函数ends-with() 工作时出现问题

    我正在尝试获取具有以特定 id 结尾的属性的标签 like span 我想获取 id 以 国家 地区 结尾的跨度我尝试以下xpath span ends with id Country 但我得到以下异常 需要命名空间管理器或 XsltCon
  • 在 Visual Studio 2008 上设置预调试事件

    我想在 Visual Studio 中开始调试程序之前运行一个任务 我每次调试程序时都需要运行此任务 因此构建后事件还不够好 我查看了设置的 调试 选项卡 但没有这样的选项 有什么办法可以做到这一点吗 你唯一可以尝试的 IMO 就是尝试Co
  • 如何将图像和 POST 数据上传到 Azure 移动服务 ApiController 终结点?

    我正在尝试上传图片and POST表单数据 尽管理想情况下我希望它是json 到我的端点Azure 移动服务应用 我有ApiController method HttpPost Route api upload databaseId sea
  • C#:如何防止主窗体过早显示

    在我的 main 方法中 我像往常一样启动主窗体 Application EnableVisualStyles Application SetCompatibleTextRenderingDefault false Application
  • C 预处理器库

    我的任务是开发源分析工具C程序 并且我需要在分析本身之前预处理代码 我想知道什么是最好的图书馆 我需要一些重量轻 便于携带的东西 与其推出自己的 为什么不使用cpp这是的一部分gcc suite http gcc gnu org onlin
  • Cython 和类的构造函数

    我对 Cython 使用默认构造函数有疑问 我的 C 类 Node 如下 Node h class Node public Node std cerr lt lt calling no arg constructor lt lt std e
  • 指针减法混乱

    当我们从另一个指针中减去一个指针时 差值不等于它们相距多少字节 而是等于它们相距多少个整数 如果指向整数 为什么这样 这个想法是你指向内存块 06 07 08 09 10 11 mem 18 24 17 53 7 14 data 如果你有i
  • C# 中的递归自定义配置

    我正在尝试创建一个遵循以下递归结构的自定义配置部分
  • for循环中计数器变量的范围是多少?

    我在 Visual Studio 2008 中收到以下错误 Error 1 A local variable named i cannot be declared in this scope because it would give a
  • 从库中捕获主线程 SynchronizationContext 或 Dispatcher

    我有一个 C 库 希望能够将工作发送 发布到 主 ui 线程 如果存在 该库可供以下人员使用 一个winforms应用程序 本机应用程序 带 UI 控制台应用程序 没有 UI 在库中 我想在初始化期间捕获一些东西 Synchronizati
  • 当操作繁忙时,表单不执行任何操作(冻结)

    我有一个使用 C 的 WinForms 应用程序 我尝试从文件中读取一些数据并将其插入数据表中 当此操作很忙时 我的表单冻结并且无法移动它 有谁知道我该如何解决这个问题 这可能是因为您在 UI 线程上执行了操作 将文件和数据库操作移至另一个
  • 将 unsigned char * (uint8_t *) 转换为 const char *

    我有一个带有 uint8 t 参数的函数 uint8 t ihex decode uint8 t in size t len uint8 t out uint8 t i hn ln for i 0 i lt len i 2 hn in i
  • C++ 复制初始化和直接初始化,奇怪的情况

    在继续阅读本文之前 请阅读在 C 中 复制初始化和直接初始化之间有区别吗 https stackoverflow com questions 1051379 is there a difference in c between copy i
  • C++ fmt 库,仅使用格式说明符格式化单个参数

    使用 C fmt 库 并给定一个裸格式说明符 有没有办法使用它来格式化单个参数 example std string str magic format 2f 1 23 current method template
  • 需要哪个版本的 Visual C++ 运行时库?

    microsoft 的最新 vcredist 2010 版 是否包含以前的版本 2008 SP1 和 2005 SP1 还是我需要安装全部 3 个版本 谢谢 你需要所有这些
  • x86 上未对齐的指针

    有人可以提供一个示例 将指针从一种类型转换为另一种类型由于未对齐而失败吗 在评论中这个答案 https stackoverflow com questions 544928 reading integer size bytes from a

随机推荐

  • Python - 类方法和 self 中的默认值

    我有以下类和方法 class Basis object def init self P dimension 1 generation 1 self P P self P angle np pi 4 where P is a dict这不包括
  • React Bootstrap OverlayTrigger 和 Tooltip 错误

    我试图在react bootstrap table的格式化程序中使用react bootstrap OverlayTrigger和Tooltip 并不断收到以下错误 OverlayTrigger 唯一需要的属性是 override 它应该是
  • 从内容 URI 获取目录路径

    我正在使用 SDKACTION OPEN DOCUMENT TREE意图让用户选择一个目录 这是代码 private static final int REQUEST PICK FOLDER 1 Override public boolea
  • 将路由值绑定到属于视图模型一部分的对象的属性

    我有以下路线 routes MapRoute Default Route name controller action id URL with parameters new controller Home action Index id P
  • 从 .NET 中的 NetworkStream 读取的正确方法是什么

    我一直在努力解决这个问题 但找不到我的代码无法从我也编写的 TCP 服务器正确读取的原因 我正在使用TcpClient类及其GetStream 方法 但有些东西没有按预期工作 要么操作无限期地阻塞 最后一个读取操作没有按预期超时 要么数据被
  • 根据月年时间格式对数据框进行排序

    我正在努力解决一些非常基本的问题 根据时间格式 月 年 或者在本例中为 B y 对数据框进行排序 我的目标是计算各种每月统计数据 从总和开始 数据框的相关部分看起来像这样 这很顺利并且符合我的目标 我将其包含在此处以显示问题所在could从
  • Angular 2 共享数据服务不工作

    我已经构建了一个共享数据服务 旨在保存用户登录详细信息 然后可以使用该详细信息在标题上显示用户名 但我无法让它工作 这是我的 缩写 代码 Shared Service Injectable export class SharedDataSe
  • SQL临时表问题

    我创建了一个临时表DETAILS并遵循创建和插入的相同语法 但我还没有收到任何结果集但是 CREATE and INSERT语句成功运行 并且 INSERT 语句中的行也受到影响 但是当我最后运行时结果集是空的SELECT语句查看记录 DR
  • Typescript 通用 通用

    不确定我想要什么打字稿功能 但我认为我需要一个通用的泛型 如果这是打字稿功能 以下是我的要求 我想表示事件 事件处理程序元组的集合 以下是我到目前为止所拥有的 interface Event type string type EventTy
  • 如何使用scrapy触发JS ASP.Net下一页事件?

    我正在从这个内容中删除内容website我首先发送一个FormRequest产生的搜索结果基于维姆 赫尔曼的回答我的另一个问题here 我抓取了需要的内容 并想要移动到下一个不包含 url 的页面 它是由 JS 触发的 html 标签如下所
  • 根据数据禁用TableRow

    我在 JavaFX 2 1 中遇到 TableView 问题 我想根据数据禁用 TableRow For eg public class RowData private String name private boolean used pu
  • 如何在 UIContainerView 中连接 UICollectionViewController

    我有一个如下所示的应用程序 ViewController是我在其中放置了 3 个容器视图控制器的父 VC 我子类化了UIViewController对于所有三个容器视图控制器 顶部 中部和底部 这是我的问题 我想要BottomVC有一个UI
  • 为什么右值不能用于初始化左值引用?

    我可以const A a A and A a A 但为什么我不能这样做A a A 理由是 改变临时变量几乎没有意义 任何这样做的尝试都可能是编程错误而不是故意的决定 原型示例如下 假设允许绑定到非常量引用 void foo int x in
  • MS Access 2003 中插入​​用户表时出现语法错误

    使用 VB NET 与 ASP NET 和 ms access 2003 数据 我尝试将数据从 Web 表单输入到 db mdb 中名为 USER 的表中 我尝试了这段代码 Protected Sub btnCreateAccount Cl
  • 通过 UIDocumentInteractionController 打开文件

    我在用UIDocumentInteractionController用于在我的应用程序中打开文档 我使用以下方法预览 PDF 文件 IBAction previewDocument id sender NSString filePath N
  • 运行时/已检查/未检查/错误/异常之间的差异

    什么是运行时异常 什么是检查 未检查异常以及错误 异常之间的区别 为什么有这么多类型 相反 Java 可能只是简单地遵循一个简单的设计 只是尝试 捕获所有类型 来处理程序中的异常情况 Since I am a new Java develo
  • 操作符new和delete重载作用域

    我偶然发现了一些关于运算符 new 和 delete 的链接和重载的问题 new delete操作符的全局重载多久生效 每个翻译单元 每个链接的应用程序至少有一个目标文件重载这些运算符 那么动态联动呢 这些运算符可以有多个定义吗 如果拿哪一
  • Django Tastypie,多对多保存错误

    当我通过 tastypie api 保存项目时遇到问题 POST方法 这是我的 api py 代码 from tastypie resources import ModelResource ALL ALL WITH RELATIONS fr
  • 调试访问冲突错误?

    在使用 Delphi 编写应用程序时 您可以分享哪些技巧来帮助查找和修复访问冲突 我相信访问冲突通常是由于尝试访问内存中尚未创建的某些内容 例如对象等 引起的 我发现很难确定是什么触发了访问违规 然后在哪里进行所需的更改以尝试停止 修复它们
  • Lambda表达式可以降级到C++ 98吗

    我最近遇到一个问题 需要将用 lambda 表达式编写的 C 11 代码集成到仅支持 C 98 编译器的旧代码库 我发现了 lambda 的几个可能的等价物 例如宏 函子或函数指针 但在用 capture 翻译 lambda 时 它们似乎都