为什么 std::apply 使用通用函数会失败?

2023-11-24

取自参考参数,为什么调用std::apply(add_generic, ...)编译失败?有办法解决吗?

#include <iostream>
#include <tuple>

int add(int first, int second)
{
    return first + second;    
}

template<typename T>
T add_generic(T first, T second)
{
    return first + second;    
}

int main()
{
    std::cout << std::apply(add, std::make_tuple(1,2)) << '\n';

    // template argument deduction/substitution fails
    std::cout << std::apply(add_generic, std::make_tuple(2.0f,3.0f)) << '\n'; 
}

It fails有错误:

[x86-64 gcc 7(快照)]错误:没有匹配的函数可调用 'apply(, std::tuple)' [x86-64 gcc 7 (snapshot)] 注意:无法推导模板 参数“_Fn”


这在 C++17 中并不新鲜。仅从签名来看std::apply,不知道你是否想通过add_generic<int>, add_generic<float>, add_generic<std::string>,或其他任何东西。知道这一点需要更多的背景信息(具体来说:它需要知道如何std::apply将调用它),但该信息在调用站点不可用,因此不能用于模板参数推导。

可以通过传递来解决这个问题one对象,并使该对象能够调用任一实例add_generic需要:

std::cout << std::apply(
    [](auto first, auto second) { return add_generic(first, second); },
    std::make_tuple(2.0f,3.0f)) << '\n';
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 std::apply 使用通用函数会失败? 的相关文章

  • 部署 MVC4 项目时出错:找不到文件或程序集

    过去 我只需使用 Visual Studio 2012 发布到 AWS 菜单项即可部署我的 MVC4 网站 到 AWS Elastic Beanstalk 现在 程序可以在本地编译并运行 但无法部署 从消息来看 它似乎正在寻找不在当前部署的
  • ROWNUM 的 OracleType 是什么

    我试图参数化所有现有的 sql 但以下代码给了我一个问题 command CommandText String Format SELECT FROM 0 WHERE ROWNUM lt maxRecords command CommandT
  • 如何在 Unity 中从 RenderTexture 访问原始数据

    问题的简短版本 我正在尝试访问 Unity 中 RenderTexture 的内容 我一直在使用 Graphics Blit 使用自己的材质进行绘制 Graphics Blit null renderTexture material 我的材
  • fgets() 和 Ctrl+D,三次才能结束?

    I don t understand why I need press Ctrl D for three times to send the EOF In addition if I press Enter then it only too
  • C# 中值类型和引用类型有什么区别? [复制]

    这个问题在这里已经有答案了 我知道一些差异 值类型存储在堆栈上 而引用类型存储在托管堆上 值类型变量直接包含它们的值 而引用变量仅包含对托管堆上创建的对象位置的引用 我错过了任何其他区别吗 如果是的话 它们是什么 请阅读 堆栈是一个实现细节
  • 如何在 WPF RichTextBox 中跟踪 TextPointer?

    我正在尝试了解 WPF RichTextBox 中的 TextPointer 类 我希望能够跟踪它们 以便我可以将信息与文本中的区域相关联 我目前正在使用一个非常简单的示例来尝试弄清楚发生了什么 在 PreviewKeyDown 事件中 我
  • 使用 C# 在 WinRT 中获取可用磁盘空间

    DllImport kernel32 dll SetLastError true static extern bool GetDiskFreeSpaceEx string lpDirectoryName out ulong lpFreeBy
  • 写入和读取文本文件 - C# Windows 通用平台应用程序 Windows 10

    有用 但在显示任何内容之前 您必须在文本框中输入内容 我想那是因为我使用了 TextChanged 事件处理程序 如果我希望它在没有用户交互的情况下显示文本文件的内容 我应该使用哪个事件处理程序 因此 我想在按下按钮时将一些数据写入 C W
  • 使用 Google Analytics API 在 C# 中显示信息

    我一整天都在寻找一个好的解决方案 但谷歌发展得太快了 我找不到有效的解决方案 我想做的是 我有一个 Web 应用程序 它有一个管理部分 用户需要登录才能查看信息 在本节中 我想显示来自 GA 的一些数据 例如某些特定网址的综合浏览量 因为我
  • A* 之间的差异 pA = 新 A;和 A* pA = 新 A();

    在 C 中 以下两个动态对象创建之间的确切区别是什么 A pA new A A pA new A 我做了一些测试 但似乎在这两种情况下 都调用了默认构造函数 并且仅调用了它 我正在寻找性能方面的任何差异 Thanks If A是 POD 类
  • 线程、进程和 Application.Exit()

    我的应用程序由主消息循环 GUI 和线程 Task Factory 组成 在线程中我调用一些第三方应用程序var p new Process 但是当我调用Application Exit 在消息循环中 我可以看到在线程中启动的进程仍在内存中
  • 像“1$”这样的位置参数如何与 printf() 一起使用?

    By man I find printf d width num and printf 2 1 d width num 是等价的 但在我看来 第二种风格应该与以下相同 printf d num width 然而通过测试似乎man是对的 为什
  • 将日期参数传递给对 MVC 操作的 ajax 调用的安全方法

    我有一个 MVC 操作 它的参数之一是DateTime如果我通过 17 07 2012 它会抛出一个异常 指出参数为空但不能有空值 但如果我通过01 07 2012它被解析为Jan 07 2012 我将日期传递给 ajax 调用DD MM
  • EPPlus Excel 更改单元格颜色

    我正在尝试将给定单元格的颜色设置为另一个单元格的颜色 该单元格已在模板中着色 但worksheet Cells row col Style Fill BackgroundColor似乎没有get财产 是否可以做到这一点 或者我是否必须在互联
  • char指针或char变量的默认值是什么[重复]

    这个问题在这里已经有答案了 下面是我尝试打印 char 变量和指针的默认值 值的代码 但无法在控制台上看到它 它是否有默认值或只是无法读取 ASCII 范围 include
  • GDK3/GTK3窗口更新的精确定时

    我有一个使用 GTK 用 C 语言编写的应用程序 尽管该语言对于这个问题可能并不重要 这个应用程序有全屏gtk window与单个gtk drawing area 对于绘图区域 我已经通过注册了一个刻度回调gtk widget add ti
  • 在 ASP.NET 中将事件冒泡为父级

    我已经说过 ASP NET 中的层次结构 page user control 1 user control 2 control 3 我想要做的是 当控件 3 它可以是任何类型的控件 我一般都想这样做 让用户用它做一些触发回发的事情时 它会向
  • C++ 成员函数中的“if (!this)”有多糟糕?

    如果我遇到旧代码if this return 在应用程序中 这种风险有多严重 它是一个危险的定时炸弹 需要立即在应用程序范围内进行搜索和销毁工作 还是更像是一种可以悄悄留在原处的代码气味 我不打算writing当然 执行此操作的代码 相反
  • 如何将字符串“07:35”(HH:MM) 转换为 TimeSpan

    我想知道是否有办法将 24 小时时间格式的字符串转换为 TimeSpan 现在我有一种 旧时尚风格 string stringTime 07 35 string values stringTime Split TimeSpan ts new
  • 如何连接字符串和常量字符?

    我需要将 hello world 放入c中 我怎样才能做到这一点 string a hello const char b world const char C string a hello const char b world a b co

随机推荐

  • 使用Powershell或命令行启动/停止应用程序池IIS6.0

    我正在使用 IIS 6 0 并寻找一种停止 启动应用程序池的方法 我知道7 0中有一个用于powershell的stop appPool 但使用的是6 0 那么有人有一个 powershell 脚本或另一个命令行 exe 可以停止 启动应用
  • 单击 JButton Java 时更改字体样式

    如何更改STYLE of the Font当点击一个JButton 我试图让 3 个按钮分别更改样式PLAIN or BOLD or ITALIC 我读过font Class API但我没有什么比setStyle我们只能getStyle 我
  • 用于简单 iPhone 游戏的核心动画或 OpenGL

    我正在编写一个简单的游戏 可以在背景图像上快速制作球图像的动画 Core Animation Quartz 足以满足这种情况吗 如果 OpenGL ES 不能为这个一次性项目提供任何实质性的好处 我真的不想学习 OpenGL ES 这是一个
  • 使用 spring 数据保存嵌套对象 - 使用 id 作为参考

    假设您正在创建该类型的新实体User User 有嵌套对象Billing鉴于您知道Billing存在于 ID 1 中 是否有一种简单的方法可以在新的User以及现有的Billing 假设获取一个Billing将对象设置给用户是一项昂贵的操作
  • Objective-C 中的方法重载?

    据我所知 Objective C 不支持方法重载 在 Objective C 中可以用什么替代方案呢 或者我应该始终使用不同的方法名称 正确 objective C 不支持方法重载 因此您必须使用不同的方法名称 但请注意 方法名称 包括方法
  • 以前的兄弟姐妹不工作

    我想瞄准第一个 p 通过选择第二个在 div 内 p p 并使用previousSibling财产 但它不起作用 p div p test p p test p div document getElementById p2 previous
  • 使用开始时间和结束时间之间的时间过滤数组或 XML

    我有一个 API 调用 该调用返回 XML 我将 XML 转换为数组 然后使用 json encode 在 jsonp 调用中发回响应 我正在做的事情正在工作 但 API 不允许我按状态过滤 按开始和结束时间过滤 也不允许我确保房间可用 几
  • 使用 AJAX 登录时 Chrome 提示保存密码

    注意 这个问题在其原始版本的基础上进行了大量编辑 问题已大大简化 类似的问题以前已经以不同的形式被问过几次 例如 如何让浏览器提示保存密码 浏览器如何知道何时提示用户保存密码 然而 这个问题涉及的是 Chrome 功能的一个非常具体的方面
  • 在 PHP 中使用分块上传 1GB 文件

    我有一个 Web 应用程序 可接受最大 4 MB 的文件上传 服务器端脚本是 PHP Web 服务器是 NGINX 许多用户请求大幅增加此限制以允许上传视频等 然而 PHP 似乎没有简单的解决方案来解决这个问题 首先 在客户端 我正在寻找一
  • 如何通过 Spring Web 服务器将 HTTP 视频流代理到任意数量的客户端

    假设我有一个视频 HTTP 流在与我的 Spring Web 服务器位于同一网络的服务器上广播 例如在某些 url 中 例如 http localhost 9090 httpstream 如何使用 Spring 将此视频流代理给任意数量的客
  • 如何将 Numba 用于 Pytorch 张量?

    我是 Numba 新手 我需要使用 Numba 来加速一些 Pytorch 功能 但我发现即使是一个非常简单的功能也不起作用 import torch import numba numba njit def vec add odd pos
  • 多记录更新时更新触发器多久触发一次?

    我创建了一个on update扳机 如果我在一条语句中更新表中的 5 条记录 触发器将执行多少次 如果我有多个语句更新单个事务中的记录 它会改变吗 是执行 5 次 还是在所有事务完成后只执行一次 这完全取决于您使用的触发器类型 行级触发器将
  • 通过 MSMQ 解耦 Web 层和数据库层是必要的还是过度的?

    我正在组装一个简单的 asp net Web 控件 作为 ajax 表单发布的结果 将一条记录插入到 MSQL 数据库中 包含此控件的页面可能会在很短的时间内收到数千次点击 我担心打开数据库连接 插入记录然后关闭每个请求的连接的性能问题 我
  • 从系统获取注销事件

    我正在做一个应用程序 用于在用户注销时清除临时文件 历史记录等 那么我如何知道系统是否要注销 在 C 中 有一个房产位于环境告诉关闭过程是否已开始的类 Environment HasShutDownStarted 但经过一番谷歌搜索后 我发
  • 模拟框架如何工作?

    如果我要编写一个模拟库 它将如何工作 换句话说 它们如何工作 我想知道的一件事是 您总是设置期望 因此实际上您需要将期望与该方法在运行时执行的操作进行比较 因此我假设需要反射 在运行时解析类型 另外 当使用术语 模拟对象 时 该对象是被删除
  • 如何将键映射到数据框列的多个值?

    我有一个 df 列 如下所示 col1 Non Profit Other 501c3 501c3 Sole Proprietor 如何创建字典对象或映射层 对所有建议开放 如果它匹配条件并更改键值 我可以在其中传递任何值 例如 如果该值为O
  • asp.net MVC - ValidationSummary 不显示

    我有一个奇怪的问题 即未显示 ValidationSummary 但是 正在显示 ValidationMessage 我检查了输出页面源代码 它们的颜色并没有遮挡它们 我用的是RC 有任何想法吗 编辑 在 ValidationSummary
  • [Pandas]如何获取每组中前n%的记录

    这是我的数据框 df pd DataFrame 1 A 40 2 A 60 3 A 47 4 B 33 5 B 69 6 B 22 7 B 90 8 C 31 9 C 78 10 C 12 11 C 89 12 C 88 13 C 99 c
  • 将当前日期增加 5 天

    date date Y m d current time timestamp 0 我该如何改变 date to date 5 days PHP 版本是 5 2 此代码不起作用 date cur date Y m d current time
  • 为什么 std::apply 使用通用函数会失败?

    取自参考参数 为什么调用std apply add generic 编译失败 有办法解决吗 include