带有模板参数的 Lambda 函数,而不是函数参数

2023-11-23

为什么第一次调用不能编译?

auto get1 = []<int B>() { return B; };
auto get2 = []<typename B>(B b) { return b; };

int main()
{
    get1<5>(); // error: no match for operator<
    get2(5);   // ok
}

我使用它的原因是代码中多次重复的表达式。

当然我可以使用真正的函数模板,但我只是好奇为什么。


如果您考虑一下等效的类类型对您来说是什么样子,这会更容易理解get1:

struct get1_t {
    template <int B> operator()() const { return B; }
};

get1_t get1;

get1<5>(); // error

您试图向调用运算符提供显式模板参数,但从语法上讲,您正在做的事情看起来像是为get1本身(即好像get1是一个可变模板)。为了为调用运算符提供模板参数,您必须直接执行此操作:

get1.operator()<5>(); // ok

或者重构调用运算符以获取可推导的内容:

template <int B> struct constant { };
get1(constant<5>{});

或者将整个事情重组为实际上的变量模板,如下所示:

template <int B>
auto get1 = [] { return B; };

Now, get1<5>本身就是您正在调用的 lambda。也就是说,我们有一个本身不是模板的变量模板 lambda,而不是带有调用运算符模板的 lambda。

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

带有模板参数的 Lambda 函数,而不是函数参数 的相关文章

  • 你好世界,裸机 Beagleboard

    我正在尝试在我的 Beagleboard xm rev 上运行 hello world 类型的程序 C 通过调用 Cputs功能来自装配 到目前为止 我一直使用这个作为参考 http wiki osdev org ARM Beagleboa
  • 有没有一种简单的方法来获取 .NET 为参数化查询生成的“sp_executesql”查询?

    背景 如果我有以下程序 public class Program public static void Main using var connection new SqlConnection Server local Database Te
  • 在 IEnumerable 中查找相同的集合

    有一项任务要弄清楚如何更新表 DataTable 连接到一个database没有UPDATE陈述 我想出的例子是从邮箱中读取警报 该表将写入 Alerts 如果邮件正文包含单词 SUCCESS gt Alert 变为绿色 如果 FAIL g
  • ctypes.ArgumentError:不知道如何转换参数

    我在C库中定义了一个函数 如下所示 int Test char str1 int id1 char str2 float val float ls 我想在Python中使用它 所以我编写了以下Python代码 str1 a str2 b i
  • 轮廓积分算法 C++

    我正在尝试编写一个应用数学程序来计算复平面中的轮廓积分 对于初学者来说 我想为梯形方法编写一个算法 但我有点坚持理解它会是什么样子 毕竟 我们通常将梯形方法视为 2D 图 而这里我们有 f C gt C 所以我们谈论的是 4D 最终我希望用
  • 终止以 System.Diagnostic.Process.Start("FileName") 启动的进程

    我正在尝试创建一个将在特定时间执行操作的应用程序 很像 Windows 任务计划程序 我当前正在使用 Process Start 来启动任务所需的文件 或 exe 我通过调用文件 mp3 启动一个进程 该进程启动 WMP 因为它是默认应用程
  • 使用 boost::asio 是否有一种可移植的方法来查找空闲端口号

    我目前正在尝试找出一种方法来查找空闲端口号以建立连接 最好使用 boost asio 然后 该端口号将用于侦听 只有这样我才能打开套接字 大致来说 有没有办法做到 tcp resolver query query localhost por
  • 可以轻易移动,但不可轻易复制

    是否可以创建类类型 即 普通移动构造 但不是普通复制构造 但仍然可复制构造 普通复制构造 但不是普通移动构造 但仍然可移动构造 可以简单地复制分配 但不能简单地移动分配 但仍然可以移动分配 可以简单地移动分配 但不能简单地复制分配 但仍然可
  • System.NotSupportedException:“集合是只读的。”从 iList 中删除对象时抛出

    运行下面的代码片段时抛出异常 我有一个 iListof webelements 如果该元素包含字符串 WSC 我想将其从 iList 中删除 谁能帮我吗 代码如下 IList
  • 将控制台输入和输出重定向到文本框

    您好 提前致谢 我正在尝试 非常努力 将控制台输入和输出重定向到文本框 到目前为止 输出工作正常 但问题在于输入 例如 我无法执行一个简单的程序来执行以下操作 Console WriteLine 请输入您的姓名 字符串名称 Console
  • OpenCV:处理每一帧

    我想使用 OpenCV 编写一个跨平台应用程序进行视频捕获 在所有示例中 我发现来自相机的帧是使用抓取功能进行处理并等待一段时间 我想处理序列中的每一帧 我想定义自己的回调函数 每次当一个新帧准备好处理时都会执行该函数 例如直播对于 Win
  • 等效

    这是否保证始终为真 std numeric limits
  • 如何从 MongoDB 中的 ChangeStream 过滤对特定字段的更新

    我正在设置一个 ChangeStream 以便在集合中的文档发生更改时通知我 以便我可以将该文档的 LastModified 元素更新插入到事件发生的时间 由于此更新将导致 ChangeStream 上发生新事件 因此我需要过滤掉这些更新以
  • BlueZ D-Bus C,应用 BLE

    我正在尝试编写一个应用程序来搜索附近的蓝牙设备并与它们通信 我的应用程序将用 C 语言编写 并打算在 Linux 下工作 是否有通过 C 中的 D Bus 使用 BlueZ 的教程或示例 此应用程序的目的是从 BLE 中的文件发送数据 你能
  • 对嵌套属性使用 XmlAttributeOverrides

    我试图使用 XmlAttributeOverrides 来控制类序列化后哪些类属性出现在 xml 中 它适用于 根 类上的属性 但不适用于嵌套属性 这是一个简单的例子来说明我想要完成的任务 我的类层次结构如下 public class Ma
  • 从资源文件获取 DisplayName [重复]

    这个问题在这里已经有答案了 我在 App GlobalResources 文件夹中有特定于文化的资源文件 现在我需要从此资源文件中读取 DisplayName 属性的值 我在用 Display Name MerchantName Resou
  • 以编程方式连接和断开 USB,“无需拔出和重新插入”

    我需要以编程方式连接和断开 USB 也就是说 我已经插入了USB设备 我需要使用 C NET 应用程序传输文件 该应用程序将监视特定文件夹并将文件从该文件夹传输到 USB 驱动器 我需要在文件传输后断开 USB 设备的连接 并在需要时连接
  • 警告从 lambda 返回捕获的引用

    我尝试使用 lambda 有条件地将引用绑定到两个变量之一 int foo bar int choice gt int if true some condition return foo else return bar 这会在 clang
  • 将 Web 场迁移到 ASP.NET 运行时版本 4,同时保持会话

    我们已将 Web 应用程序从 net 运行时 2 v 3 5 迁移到 net 运行时 4 v 4 5 我有一个部署问题 我们的 sessionstate 服务器是一个 stateserver 并在单独的服务器上运行框架 2 中的 aspne
  • 文件按文件名模式存在

    我在用 File Exists filepath 我想做的是将其替换为模式 因为文件名的第一部分发生了变化 例如 该文件可以是 01 peach xml 02 peach xml 03 peach xml 如何根据某种搜索模式检查文件是否存

随机推荐

  • 使用 Selenium Web Driver 测试动态加载的内容

    我正在开发一个具有基于 Web 的前端的系统 我正在使用 Selenium 对其进行测试 在一页上 向下滚动时会动态加载内容 也许您从 Facebook 的好友列表中知道这一点 因为这是要求之一 通过 Javascript 使用 Selen
  • “if”语句的编码风格[重复]

    这个问题在这里已经有答案了 最近 我注意到一些程序员将 if 语句倒着写的风格 也就是说 在测试中 他们首先放置常量值 然后放置正在测试的变量 例如他们写道 bar foo if MY CONSTANT bar then do someth
  • buildroot - 如何更改内核版本字符串

    我使用 buildroot 和 Armstrong linux Linux4sam 开发 SAM9G25 EK 板 我的脚本正在创建linux版本 2 6 39 这个 令人困惑 lib modules文件夹等 我想删除它 我发现只有两个文件
  • WordPress:在显示链接之前检查是否有以前的帖子

    我使用以下代码在我的 WordPress 博客上显示 以前的帖子 链接
  • 单元测试新手

    我想知道如何使用 Visual Studio 2008 net 2 0 在现有 相当大 的应用程序中实现单元测试 我知道为现有 遗留代码开发单元测试是不现实的 但我希望对代码进行测试 我找到了大量关于如何编写代码测试的示例 但没有找到关于如
  • SMTP Indy 组件安全和身份验证属性有什么作用?

    我正在使用 indy 组件在 delphi 应用程序中实现电子邮件 我专门使用 TidSMTP 组件 我需要有效地支持所有主要的电子邮件服务器 我使用 Mozilla Thunderbird 作为我的电子邮件客户端 并将 smtp 属性与
  • Ply Lex 解析问题

    我使用 ply 作为我的 lex 解析器 我的规格如下 t WHILE r while t THEN r then t ID r a zA Z a zA Z0 9 t NUMBER r d t LESSEQUAL r lt t ASSIGN
  • 在 ASP.NET 中实现文件下载时如何处理我的文件流?

    我有课DocumentGenerator其中包含一个MemoryStream 所以我已经实施了IDisposable在课堂上 但我不知道如何 在哪里可以处置它 这是我当前的代码 它在 MVC 中执行文件下载 using DocumentGe
  • 为什么 Console.ReadKey() 会阻止另一个线程中调用的 Console.WriteLine 的输出?

    我有一个非常简单的控制台应用程序 static void Main string args DoAsync Console ReadKey Here DoAsync启动一组任务并返回 不等待任务完成 每个任务都会写入控制台 但在按下按键之前
  • 如何在 Magento 中找到合适的事件?

    有时 当寻找方便的事件来挂钩时 我会进行一些探索性编程 Modify Mage dispatchEvent加上这个额外的行 Mage log name implode array keys data 标记一个我知道我无法更快捕捉到的起点 M
  • 如何将浮点数舍入到给定精度?

    我需要一种方法将浮点数四舍五入到给定的小数位数 但我希望始终向下舍入 例如 代替 gt gt gt round 2 667 2 2 67 我宁愿 gt gt gt round down 2 667 2 2 66 你有一个朋友在quantiz
  • 如何在 Access 中“链接”链接表?

    我的场景 计算机 A 有一个包含链接表的 Access 数据库 这些链接表实际上驻留在计算机 B 上的另一个 Access 数据库中 还没有什么异常 现在我们创建一个 SQL Server 数据库 并与计算机 B 上的 Access 数据库
  • 当我的类具有静态成员时,为什么我的 C++ 程序无法链接?

    我有一个名为 Stuff 的小类 我想在其中存储东西 这些东西是 int 类型的列表 在我使用的任何类中的整个代码中 我希望能够访问 Stuff 类中的这些内容 主要 cpp include Stuff h int main Stuff t
  • SweetAlert 下拉列表动态添加列表中的项目

    我目前正在使用 sweetalert2 从对话框中捕获用户的输入 我想在链接队列对话框中使用下拉菜单 但我似乎找不到在下拉列表中动态添加项目的方法 假设我想从 JSON 格式检索数据并将其放入下拉列表中 有没有办法做到这一点 functio
  • 如何修复 PlotlyRequestError?

    当我执行代码时 我收到 PlotlyRequestError 无消息 import plotly import plotly plotly as py import plotly graph objs as go Filedata pd r
  • 计算两行之间的时间差

    我正在尝试使用计算两行之间的时间差shift 但我收到意外错误 我可能遗漏了一些明显的东西 df Delta df index df index shift 1 该语句产生一个ValueError Cannot shift with no
  • 在 UIView 上使用 CAGradientLayer 绘制渐变不起作用

    我试图在视图控制器的背景视图上绘制渐变 但由于某种原因我无法让它工作 这是我的方法 它是从viewDidLoad void drawGradient CAGradientLayer gradient CAGradientLayer laye
  • 移动应用程序中的 OAuth 机密

    使用 OAuth 协议时 您需要从要委托的服务获取秘密字符串 如果您在网络应用程序中执行此操作 则可以简单地将机密存储在数据库或文件系统中 但在移动应用程序 或桌面应用程序 中处理它的最佳方法是什么 将字符串存储在应用程序中显然不好 因为有
  • 如何获取 Document 目录中目录的 URL 路径?

    如何获取文档目录中特定目录的 url 路径 like Document Art My code NSURL localRoot if localRoot nil return localRoot NSArray paths NSFileMa
  • 带有模板参数的 Lambda 函数,而不是函数参数

    为什么第一次调用不能编译 auto get1