使用 lambda 作为参数:std::function 还是模板?

2023-11-21

我正在学习 c++11,对 lambda 特别感兴趣。

经过一些实践,我假设 lambda 闭包是一个无名函数对象。

所以我写了这段代码。

template <class callable_object>
void lambda_caller( callable_object lambda )
{
    std::cout<< sizeof(lambda) << endl;
    lambda();
}

我知道我可以使用std::function而不是使用模板,但我不想在类型转换时产生开销。

但我在阅读这个问题时发现一个问题:为什么我无法在 C++11 中创建 lambda 向量?

回答者说:“每个 lambda 都有不同的类型 - 即使它们具有相同的签名。”。

编译器为不同的类生成不同的代码。

所以我认为我的编译器会制作另一个版本lambda_caller每当我对 lambda 进行另一个定义来传递时。

除了使用之外,有什么方法可以避免它std::function?没有 lambda 闭包的泛型类型吗?


你无法避免它。 Lambda 只是一个重载了operator()() 的类,它会执行您的代码。所以不同的代码-不同的类。

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

使用 lambda 作为参数:std::function 还是模板? 的相关文章

随机推荐

  • 重新附加实体图并检测集合更改

    我首先使用实体 框架代码 并通过 WCF REST HTTP 接口公开 Northwind 数据库 我没有公开 OrderDetails 表 订单项 因为创建订单然后通过另一个服务单独添加每个所需的 OrderDetail 是没有意义的 在
  • 在 Rails 中使用带有 has_many 的委托?

    我们有 2 个模型和一个连接模型 app models message rb Class Message lt ActiveRecord Base has many image messages has many images throug
  • 如何对实体的自定义属性进行建模?

    假设我们有一个应用程序应该能够存储所有类型的产品 每个产品至少有一个ID and a Name但所有其他属性都可以由用户自己定义 例如 他可以创建一个产品组Ipods其中将包含属性capacity and 一代 例如 他可以创建一个产品组T
  • strstr 的优化版本(搜索具有恒定长度)

    我的 C 程序有很多 strstr 函数调用 标准库 strstr 已经很快 但在我的例子中 搜索字符串的长度始终为 5 个字符 我用一个特殊版本替换了它以获得一些速度 int strstr5 const char cs const cha
  • C# - 让 Process.Start 等待进程启动

    在继续使用方法之前 我需要确保进程正在运行 声明是 Process Start popup exe 您可以执行 WAIT 命令或对此值设置延迟吗 你的意思是等到完成吗 然后使用Process WaitForExit var process
  • Linq 表达式中的条件运算符导致 NHibernate 异常

    我正在尝试在 ASP NET MVC 2 应用程序中实现搜索功能 我根据用户输入的条件创建一个表达式 public ViewResult FindCustomer string forename string familyname Date
  • 奇怪的for循环问题

    我不确定这是否是一个错误 所以我想也许你们可能想看一下 问题出在这段代码上 for i 0 1 05 do print i end 输出应该是 0 05 1 snip 95 1 相反 输出是 0 05 1 snip 95 while 循环也
  • Laravel 5.5 具有不同列名的单独表的唯一验证规则

    所以我有用户和公司 一名用户属于一家公司 我想验证用户注册 以便business name他们用来注册的字段在companies表 目标是不允许用户创建重复的公司 这是我的注册功能 public function register Requ
  • 更改活动输入选择器的背景颜色

    任何原因为什么当我运行这段代码时 input type submit active background color green 当我单击所需的按钮时 它只会闪烁绿色一瞬间 然后返回到原始颜色 怎样才能让它永远保持绿色呢 input typ
  • 非常量引用绑定到临时的 Visual Studio bug?

    我在编译一些可移植代码时遇到了这个问题gcc 基本上这个奇怪的代码在 Visual Studio 中编译 这真的让我大吃一惊 class Zebra int x Zebra goo Zebra z return z void foo Zeb
  • Min-width, max-width css 使用最小宽度

    好吧 所以我希望做的是创建一个 DIV 它将根据其中的内容自动调整大小 但它应该使用尽可能小的宽度 我不知道如何做到这一点 所以 如果我有一个包含 3 个字符的 DIV 标签 其宽度无疑低于 200px 那么我想要的就是 div 为 200
  • pthread_mutex_lock.c:62: __pthread_mutex_lock: 断言 `mutex->__data.__owner == 0' 失败

    我收到了那个错误 pthread mutex lock c 62 pthread mutex lock 断言 mutex gt data owner 0 失败 我找不到任何原因 但是我不确定以下代码 声明 std mutex lock st
  • 如何使用 jquery 隐藏父元素?

    假设以下 HTML li class fooli a class foo href anchor a li li class fooli a class foo href anchor a li 和以下 Javascript 使用 jque
  • ASP.NET 的 JSON 最大长度问题

    我正在创建一个 asp net 2 0 Web 服务 它提供 json 作为输出 并且有一个非常大的 无法分解的数据集 超出了最大长度限制 我在互联网上搜索过 net 3 5 4 上有解决方案 但 2 0 上没有 谁能告诉我如何增加 JSO
  • Android Gradle Jacoco:用于集成测试的离线工具

    我们正在构建一个 Android 应用程序 并使用 Appium 进行测试 现在我想看看我们的 Appium 测试的测试覆盖率 我认为这是可能的 因为Jacoco支持离线检测 http www eclemma org jacoco trun
  • 如何在 Visual Studio Code 中以 noprofile 启动 Powershell 脚本

    如何在 Visual Studio Code 中以 noprofile 启动 Powershell 脚本 我可以使用 noprofile with 命令运行 Powershell IsePowerShell Ise NoProfile 但是
  • 厨师包装食谱最佳实践

    在学习厨师的过程中 我看到了包装食谱的相互冲突的模式 例如 一些食谱使用default rb 而另一些则使用customize rb进行覆盖 attributes default rb attributes customize rb 哪个是
  • (仍然)无法正确安装 python 的 lxml 2.3,但至少 2.2.8 可以工作

    2011年6月30日 我因为这个问题而奖励 Pablo 因为他answer 由于他的评论中讨论的原因 我仍然无法正确安装 lxml 2 3 我收集了一些可以做的工作 但我已经在这个问题上花费了大量的时间 不过 我已经编写了所需的代码并成功安
  • selenium webdriver 找到锚标记并单击它

    div ul class selectors modeSelectors li a href content l411846326l1213g references title span class selector References
  • 使用 lambda 作为参数:std::function 还是模板?

    我正在学习 c 11 对 lambda 特别感兴趣 经过一些实践 我假设 lambda 闭包是一个无名函数对象 所以我写了这段代码 template