std::function 的类型推导

2024-01-15

以下代码不会编译,因为在编译时未调用匹配的 std::function 构造函数。

template <typename X, typename Y>
Y invoke(std::function<Y(X)> f, X x) {
    return f(x);
}

int func(char x) {
    return 2 * (x - '0');
}

int main() {
    auto val = invoke(func, '2');
    return 0;
}

但是是否有可能提供与上面示例中预期的相同(或相似)的功能?有没有一种优雅的方式让函数接受任何 Callable:

invoke([](int x) -> int { return x/2; }, 100); //Should return int == 50

bool (*func_ptr)(double) = &someFunction;
invoke(func_ptr, 3.141); //Should return bool

?


#include <functional>
#include <cassert>

template <typename F, typename X>
auto invoke(F&& f, X x) -> decltype(std::forward<F>(f)(x)) {
    return std::forward<F>(f)(x);
}

int func(char x) {
    return 2 * (x - '0');
}

bool someFunction(double) {return false;}

int main() {
    auto val = invoke(func, '2');
    assert(val == 4);
    auto val2 = invoke([](int x) -> int { return x/2; }, 100);
    assert(val2 == 50);
    bool (*func_ptr)(double) = &someFunction;
    bool b = invoke(func_ptr, 3.141);
    return 0;
}

现场样品位于http://melpon.org/wandbox/permlink/zpkZI3sn1a76SKM8 http://melpon.org/wandbox/permlink/zpkZI3sn1a76SKM8

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

std::function 的类型推导 的相关文章

  • 将复选框添加到 UniformGrid

    我正在尝试将复选框动态添加到 wpf 中的统一网格中 但看起来网格没有为它们分配足够的空间 所以它们都有点互相重叠 这就是我将它们添加到后面的代码中的方法 foreach string folder in subfolders PathCh
  • 如何使 Windows 窗体的关闭按钮不关闭窗体但使其不可见?

    该表单有一个 NotifyIcon 对象 当用户单击 关闭 按钮时 我希望表单不关闭而是变得不可见 然后 如果用户想再次查看该表单 可以双击系统托盘中的图标 如果用户想关闭表单 可以右键单击该图标并选择 关闭 有人可以告诉我如何使关闭按钮不
  • 是否可以强制 XMLWriter 将元素写入单引号中?

    这是我的代码 var ptFirstName tboxFirstName Text writer WriteAttributeString first ptFirstName 请注意 即使我使用 ptFirstName 也会以双引号结束 p
  • 如何避免情绪低落?

    我有一个实现状态模式每个状态处理从事件队列获取的事件 根据State因此类有一个纯虚方法void handleEvent const Event 事件继承基础Event类 但每个事件都包含其可以是不同类型的数据 例如 int string
  • 如何忽略“有符号和无符号整数表达式之间的比较”?

    谁能告诉我必须使用哪个标志才能使 gcc 忽略 有符号和无符号整数表达式之间的比较 警告消息 gcc Wno sign compare 但你确实应该修复它警告你的比较
  • Newtonsoft JSON PreserveReferences处理自定义等于用法

    我目前在使用 Newtonsoft Json 时遇到一些问题 我想要的很简单 将要序列化的对象与所有属性和子属性进行比较以确保相等 我现在尝试创建自己的 EqualityComparer 但它仅与父对象的属性进行比较 另外 我尝试编写自己的
  • 将布尔参数传递给 SQL Server 存储过程

    我早些时候问过这个问题 我以为我找到了问题所在 但我没有 我在将布尔参数传递给存储过程时遇到问题 这是我的 C 代码 public bool upload false protected void showDate object sende
  • 在 Visual Studio 2008 上设置预调试事件

    我想在 Visual Studio 中开始调试程序之前运行一个任务 我每次调试程序时都需要运行此任务 因此构建后事件还不够好 我查看了设置的 调试 选项卡 但没有这样的选项 有什么办法可以做到这一点吗 你唯一可以尝试的 IMO 就是尝试Co
  • Web API - 访问 DbContext 类中的 HttpContext

    在我的 C Web API 应用程序中 我添加了CreatedDate and CreatedBy所有表中的列 现在 每当在任何表中添加新记录时 我想填充这些列 为此目的我已经覆盖SaveChanges and SaveChangesAsy
  • vector 超出范围后不清除内存

    我遇到了以下问题 我不确定我是否错了或者它是一个非常奇怪的错误 我填充了一个巨大的字符串数组 并希望在某个点将其清除 这是一个最小的例子 include
  • C# 中的递归自定义配置

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

    我在 Visual Studio 2008 中收到以下错误 Error 1 A local variable named i cannot be declared in this scope because it would give a
  • clang 实例化后静态成员初始化

    这样的代码可以用 GCC 编译 但 clang 3 5 失败 include
  • Discord.net 无法在 Linux 上运行

    我正在尝试让在 Linux VPS 上运行的 Discord net 中编码的不和谐机器人 我通过单声道运行 但我不断收到此错误 Unhandled Exception System Exception Connection lost at
  • 实体框架 4 DB 优先依赖注入?

    我更喜欢创建自己的数据库 设置索引 唯一约束等 使用 edmx 实体框架设计器 从数据库生成域模型是轻而易举的事 现在我有兴趣使用依赖注入来设置一些存储库 我查看了 StackOverflow 上的一些文章和帖子 似乎重点关注代码优先方法
  • 插入记录后如何从SQL Server获取Identity值

    我在数据库中添加一条记录identity价值 我想在插入后获取身份值 我不想通过存储过程来做到这一点 这是我的代码 SQLString INSERT INTO myTable SQLString Cal1 Cal2 Cal3 Cal4 SQ
  • C++ fmt 库,仅使用格式说明符格式化单个参数

    使用 C fmt 库 并给定一个裸格式说明符 有没有办法使用它来格式化单个参数 example std string str magic format 2f 1 23 current method template
  • 如何让Gtk+窗口背景透明?

    我想让 Gtk 窗口的背景透明 以便只有窗口中的小部件可见 我找到了一些教程 http mikehearn wordpress com 2006 03 26 gtk windows with alpha channels https web
  • Validation.ErrorTemplate 的 Wpf 动态资源查找

    在我的 App xaml 中 我定义了一个资源Validation ErrorTemplate 这取决于动态BorderBrush资源 我打算定义独特的BorderBrush在我拥有的每个窗口以及窗口内的不同块内
  • 恢复上传文件控制

    我确实阅读了以下帖子 C 暂停 恢复上传 https stackoverflow com questions 1048330 pause resume upload in c 使用 HTTP 恢复上传 https stackoverflow

随机推荐

  • 如何确定mxgraph中连接的哪一侧已连接

    我遇到这样的问题 一个决定有 3 个方面Input Yes No 我想确定箭头连接到其中的哪一个 这是我要连接的方式 从 是 连接 问题 如何知道连接是否已连接Input Yes No sides Note 如果问题可以通过内置菱形解决 那
  • 无法从 Firebase 检索图像

    我正在尝试构建一个信使类型的应用程序 为此 我将手机中的图像上传到 Firebase 该图像已成功存储在 Firebase 存储中 我正在尝试在手机上显示图像 我使用 Picasso 和 Glide 从 Firebase 检索图像 但我的照
  • 如何在java中用普通矩形轮廓绘制圆角矩形

    对于我的 java 应用程序 我需要一个圆角矩形 其轮廓看起来像普通矩形 如下所示 我知道你可以通过在其中绘制一个普通矩形和一个 RoundRect 来实现这一点 但我不想在其中绘制一个 RoundRect 因为我想在其中绘制其他内容 所以
  • 暂停和恢复 ScheduledExecutorService

    我正在写一个俄罗斯方块克隆 我想让碎片每 60 秒落下得更快一点 为此我使用了预定执行服务 http docs oracle com javase 7 docs api java util concurrent ScheduledExecu
  • 创建运行时确定类型实例的最佳方法[重复]

    这个问题在这里已经有答案了 创建运行时确定的类型实例的最佳方法 在 NET 4 中 是什么 我有一个实例方法 虽然作用于 BaseClass 对象 但可以由其派生类的实例调用 我需要创建另一个相同类型的实例this方法内 为每个派生类重载方
  • 使用 ToArray() 将列表转换为数组

    我创建了一个名为 listItem 的类和以下列表 List
  • 重新申报错误

    我已经理解声明和定义之间的区别 当我遇到疑问时 我正在练习一些问题 下面的代码要求我列出代码片段中的错误 f int a int b int a a 20 return a 为什么这会给出重新声明错误a 它不应该给出多重定义吗a因为在 f
  • 使用 APIController 补充 [FromUri] 序列化

    我们有多个 API 控制器接受 GET 请求 如下所示 FooController public IHttpActionResult Get FromUri Foo f BarController public IHttpActionRes
  • “未使用的导入警告”和 pylint

    因此 我正在使用 Python 开发一个项目 并尝试使其符合 pylint 以及一般情况下的标准 所以 我有一个源文件 我们将其称为 a py a py import loggingsetup def foo log info This i
  • C 堆栈中的递归[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 这是合并排序中分区的代码 我实际上无法理解 reusrion 在其中是如何工作的 合并排序分区 void partition int arr
  • 7z 命令行压缩文件夹

    我正在尝试使用 7zG exe 的命令行来压缩 7z 文件夹 我的代码适用于文件 但不适用于文件夹 有人可以告诉我使用 7z 命令行压缩文件夹的正确方法吗 以下是仅适用于文件的示例代码 每当我尝试运行此代码时 7zip 都会显示一个消息框
  • 如何在matlab中编写指标函数

    我是 matlab 的新用户 我想解决以下问题 我想构造一个分段常数函数f f应该是一个匿名函数 例如f t 1 0 0 25 t 然而 分段常数函数的区间数一般不固定 相反 分段间隔取决于用户输入 例如 如果输入4 则分段间隔变为 0 0
  • WooCommerce 在订单状态完成时触发功能

    我试图在订单完成时触发一个功能 我正在使用这段代码 add action woocommerce order status completed array this payment complete 1 然后这个函数 public func
  • 异步等待进度报告不起作用

    我有一个 C WPF 程序 它打开一个文件 逐行读取它 操作每一行 然后将该行写入另一个文件 那部分工作得很好 我想添加一些进度报告 因此我将方法设为异步 并将 wait 与进度报告结合使用 进度报告非常简单 只需更新屏幕上的标签即可 这是
  • 从 RSA .pem 文件获取私钥 [重复]

    这个问题在这里已经有答案了 鉴于这种 pem文件 使用 openssl 生成并使用密码加密 BEGIN RSA PRIVATE KEY Proc Type 4 ENCRYPTED DEK Info DES EDE3 CBC AC009672
  • 在注释视图上使用 canShowCallout 时出现 MKMapKit 异常

    我正在尝试使用非常简单的自定义地图注释视图和标注 创建注释视图时 只需将 UIImageView 作为子视图添加到其自身 效果很好 但是 当我在注释视图上调用 canShowCallout 时 返回视图后立即在 MapKit 中引发异常 堆
  • 在数据库中记录 ActionMailer 发送的电子邮件的最佳方式?

    我需要记录通过 ActionMailer 发送的电子邮件 而简单的文本文件是不够的 我需要将日志存储在 ActiveRecord 模型中 电子邮件发送性能可能会受到影响 但在这种情况下 这是最好的选择 因为应用程序随后会定期访问日志 我还需
  • 合并android清单文件,过滤器冲突

    我正在尝试合并 Unity 中 2 个插件的 Android 清单文件 但是有两个活动具有相同的意图过滤器 我只能让其中一个同时工作 在这 2 个冲突的活动中 清单文件中位于顶部的活动有效 因此 如果清单 1 中的活动位于顶部 则插件 1
  • 为什么 bash 没有捕获来自 Java 的 process.destroy() 的信号[重复]

    这个问题在这里已经有答案了 用于测试的脚本 The script below just hangs until you press Ctrl C then it takes two seconds to shut down I wrote
  • std::function 的类型推导

    以下代码不会编译 因为在编译时未调用匹配的 std function 构造函数 template