使用 lambda 作为函数指针时,模板参数推导/替换失败

2023-12-27

我想知道为什么在下面的代码中编译器无法使用 lambda 作为函数 foo() 的参数(模板参数推导/替换失败),而一个简单的函数却可以工作:

template<class ...Args>
void foo(int (*)(Args...))
{
}

int bar(int)
{
    return 0;
}

int main() {
    //foo([](int) { return 0; }); // error
    foo(bar);
    return 0;
}

英特尔编译器(版本 18.0.3 )

template.cxx(12): error: no instance of function template "foo" matches the argument list
            argument types are: (lambda [](int)->int)
      foo([](int) { return 0; }); // error
      ^
template.cxx(2): note: this candidate was rejected because at least one template argument could not be deduced
  void foo(int (*)(Args...))

有任何想法吗?


模板参数推导 https://en.cppreference.com/w/cpp/language/template_argument_deduction#Implicit_conversions不考虑隐式转换。

类型推导不考虑隐式转换(上面列出的类型调整除外):这就是过载解析 https://en.cppreference.com/w/cpp/language/overload_resolution,这会在稍后发生。

您可以将 lambda 显式转换为函数指针,例如您可以使用static_cast,

foo(static_cast<int(*)(int)>([](int) { return 0; }));

or operator+ https://stackoverflow.com/q/18889028/3309790,

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

使用 lambda 作为函数指针时,模板参数推导/替换失败 的相关文章

随机推荐

  • Delphi:类似 FireFox 中的 AnimateWindow

    我有一个面板 底部对齐 和一些控件 客户端对齐 为了使面板动画化 我使用 AnimateWindow Panel Handle 1000 aw hide or AW SLIDE OR AW VER POSITIVE panel Visibl
  • InvalidDefinitionException:找不到内部类的序列化器

    我有这门课 我想返回RestAPI打电话进来JSON format return ResponseEntity ok cacheControl CacheControl maxAge 5 TimeUnit MINUTES body hote
  • Gradle 构建在全新安装和空项目上永久运行

    Gradle 构建永远运行 我不明白为什么 我在 Ubuntu 15 04 上安装了 Android Studio 它使用向导中的所有默认选项进行设置 我创建了一个空项目 没有添加任何代码 当我尝试构建项目时 gradle 进程会启动但永远
  • 如何获得 2 个表的结果

    我有 2 张桌子 一种叫booking 另一种叫room Booking 中的列为 RoomID startdate enddate customerId 房间中的列是 RoomID 大小 我想从预订表中选择一行 其中日期位于开始日期和结束
  • 尝试在集群上无头运行 NetLogo 时出现 Java 错误

    我正在尝试使用 Linux 无头运行 Netlogo 以便将作业发送到集群 我以前从未使用过 Linux 但我正在尝试按照此处的说明进行操作 http netlogo users 18673 x6 nabble com Running Ne
  • FlushViewOfFile (Windows) 和 msync(Linux) 的时间消耗

    我们感兴趣的是时间消耗FlushViewOfFile https learn microsoft com en us windows win32 api memoryapi nf memoryapi flushviewoffile and
  • Scala 过滤器元组 (x, y) == (y, x)

    我有一个元组列表 例如 0 2 0 5 2 0 2 5 3 4 4 3 5 0 5 2 有一些元组在哪里 x y y x 例如 5 0 和 0 5 我只想留下其中一个 例如第一个 我该怎么做 使用左折叠 var ts List 0 2 0
  • Python 中真正的非阻塞 HTTPS 服务器

    我正在尝试用 Python 构建一个真正的非阻塞 HTTPS 服务器 如果每个人都玩得很好 下面的最小代码就可以正常工作 import BaseHTTPServer import SimpleHTTPServer import Socket
  • Python struct.pack 和 unpack

    我绝不是一个经验丰富的Python程序员 这就是为什么我相信这个问题可能有一个明显的答案 但我就是无法理解struct pack和unpack 我有以下代码 struct pack lt I elements self buf elemen
  • Android Compose 导航和 ViewModel 生命周期

    我刚刚开始使用 Compose 对于我来说 第一眼看上去 它就像是我喜欢的 SwiftUI 的副本 但当我真正开始使用它时 我很快就遇到了很多问题 显然 我需要找到如何使用它才能从中受益的正确方法 这是我的问题之一 package org
  • 确定 STDERR 是否要终端

    我有一套 Java 程序 它们在我们的 Linux 服务器上用作命令行工具 他们中的大多数使用一个在 STDERR 上打印进度条的类 类似于 Perl 的Term ProgressBar 我希望每当 STDERR 进入终端时显示进度条 并在
  • 使用表达式树的 Foreach 循环

    我见过这个构建动态表达式树时出现问题 https stackoverflow com questions 3646283 issue while building dynamic expression tree and 表达式 语句树 ht
  • OutOfMemoryException - 没有想法

    我知道我的问题没有简单的答案 但我希望得到一些想法 指南或 某种要看的东西清单 我有一个网络 Windows 服务不断抛出 OutOfMemoryException 该服务有两个针对 x86 和 x64 Windows 的版本 然而在 x6
  • C# 中 Bmp 转 jpg/png

    有没有办法在 C 中将 bmp 图像转换为 jpg png 而不损失质量 使用 Image 类我们可以将 bmp 转换为 jpg 但输出图像的质量很差 我们能否获得与使用最高质量的 Photoshop 转换为 jpg 的图像一样好的质量水平
  • 如何在netbeans中创建gradle多项目?

    我是 gradle 新手 正在尝试在 netbeans 中创建一个目录布局 myproject ear build gradle core build gradle web build gradle include core project
  • 了解 scikit-learn 中的 DictVectorizer?

    我正在探索不同的特征提取类scikit learn提供 正在阅读文档 http scikit learn org stable modules generated sklearn feature extraction DictVectori
  • 发光问题,未解决的外部问题

    我想开始使用 OpenGL 3 和 4 但我在让 Glew 工作时遇到问题 我尝试将 glew32 lib 包含在附加依赖项中 并且已将库和 dll 移动到主文件夹中 因此不应该有任何路径问题 我收到的错误是 Error 5 error L
  • PHP 7.x 使用 MAMP 与 MSSQL 服务器连接

    我正在尝试通过 MAMP 将 mssql 服务器连接到 PHP 7 0 8 我尝试过使用 freetds 在一些博客上人们说使用pdo dblib so扩展 但它不起作用 请指导我完成连接过程 对于仍然遇到此问题的人 Application
  • 使 sympy 表达式中的所有符号可交换

    假设 sympy 表达式中有许多非交换符号 例如 a c sympy symbols a c commutative False b sympy Symbol b expr a c b c 使表达式中的所有符号可交换的首选方式是什么 例如
  • 使用 lambda 作为函数指针时,模板参数推导/替换失败

    我想知道为什么在下面的代码中编译器无法使用 lambda 作为函数 foo 的参数 模板参数推导 替换失败 而一个简单的函数却可以工作 template