如何减少对模板函数的调用

2023-12-29

有一个功能

template <class ...T>
void foo(std::function<void(T...)> callback);

我向其中传递了一个回调。

我想做类似的事情

foo(bar);

where bar例如,

void bar(int a, long b, double c, float d);

但这给了我

error: no matching function for call to bar(void (&)(int, long int, double, float))

我得打电话foo as

foo(std::function<void(int, long, double, float)>(bar));

这太冗长了。甚至

foo<int, long, double, float>(bar);

会更好。

foo(bar);

就很理想了。

无论如何,我怎样才能打电话给foo变得不那么冗长?

Edit:声明foo必须保持不变。


我会编写一个包装函数,将函数指针转换为std::function包装:

template <typename... T>
void foo(std::function<void (T...)> f) {}

template <typename... T>
void foo(void (*f)(T...)) {
    foo(std::function<void (T...)>(f));
}

foo()然后可以以任何一种方式调用:

void bar(int,double) {}

void foo_caller() {
    foo(std::function<void (int,double)>(bar));
    foo(bar);
}

附录:非静态成员函数包装器

相同的方法可用于指向成员函数的指针 - 只需添加另一个重载:

template <typename C,typename... T>
void foo(void (C::*f)(T...)) {
    foo(std::function<void (C *,T...)>(f));
}

请注意额外的第一个参数this成员函数的指针。用法类似:

struct quux {
    void mf(char *,double) {}
};

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

如何减少对模板函数的调用 的相关文章

  • setContextProperty 和对象的 setProperty 之间的区别

    我现在真的很困惑 有什么区别 QQmlApplicationEngine engine engine rootContext setContextProperty myObject userData and object gt setPro
  • C# 创建函数队列

    我写了一个名为 QueueManager 的类 class QueueManager Queue functionsQueue public bool IsEmpty get if functionsQueue Count 0 return
  • 是否允许将类模板类型参数键入相同的名称?

    这似乎可以在 MSVC 中按预期编译甚至工作 但它是合法的 C 代码吗 它是否能保证执行此处所期望的操作 即将模板类型导出到结构体的同名用户 template
  • 使用 OpenGL 着色器进行数学计算 (C++)

    我有一个矩阵 例如 100x100 尺寸 我需要对每个元素进行计算 matrix i j tt 8 5例如 我有一个巨大的矩阵 我想使用 OpenGL 着色器来实现该算法 我想使用着色器 例如 uniform float val unifo
  • 如何在 Asp.net Gridview 列中添加复选框单击事件

    我在 asp 中有一个 gridview 其中我添加了第一列作为复选框列 现在我想选择此列并获取该行的 id 值 但我不知道该怎么做 这是我的 Aspx 代码
  • 矩阵向量变换

    我正在编写一个代码来制作软件蒙皮器 骨骼 皮肤动画 并且我正处于 优化 阶段 蒙皮器工作得很好 并且在 Core 上 1 09 毫秒内对 4900 个三角形网格与 22 个骨骼进行蒙皮Duo 2 Ghz 笔记本 我需要知道的是 1 有人可以
  • 有没有办法使用 i387 fsqrt 指令获得正确的舍入?

    有没有办法使用 i387 fsqrt 指令获得正确的舍入 除了改变精确模式在 x87 控制字中 我知道这是可能的 但这不是一个合理的解决方案 因为它存在令人讨厌的重入型问题 如果 sqrt 操作中断 精度模式将出错 我正在处理的问题如下 x
  • 序列化和反序列化 Visual Studio 解决方案文件 - 或以编程方式编辑?

    我想以编程方式添加和删除项目 解决方案文件夹和其他项目 例如解决方案的资源文件 但我不确定最好的方法是什么 对于那些不知道的人 高度简化 解决方案文件 sln 通常如下所示 Microsoft Visual Studio Solution
  • 编译器错误“错误:在文件范围内可变地修改了‘字符串’”

    考虑 include
  • 防止GDB中的PLT(过程链接表)断点

    在最新版本的 GDB 中 在库函数调用上设置断点会导致多个实际断点 调用过程链接表 PLT 实际的函数调用 这意味着当调用库函数时 我们每次都会经历两次中断 在以前的 GDB 版本中 只会创建 2 因此您只能得到一次中断 那么问题来了 是否
  • 特征密集稀疏矩阵乘积是线程化的吗?

    我知道稀疏密集产品是根据文档进行线程化的 https eigen tuxfamily org dox TopicMultiThreading html https eigen tuxfamily org dox TopicMultiThre
  • dropdownlist DataTextField 由属性组成?

    有没有一种方法可以通过 C 使 asp net 中的下拉列表的 datatextfield 属性由对象的多个属性组成 public class MyObject public int Id get set public string Nam
  • 正确使用“extern”关键字

    有一些来源 书籍 在线材料 解释了extern如下 extern int i declaration has extern int i 1 definition specified by the absence of extern 并且有支
  • 设计 Javascript 前端 <-> C++ 后端通信

    在我最近的将来 我将不得不制作一个具有 C 后端和 Web 前端的系统 要求 目前 我对此了解不多 我认为前端将触发数据传输 而不是后端 所以不需要类似 Comet 的东西 由于在该领域的经验可能很少 我非常感谢您对我所做的设计决策的评论
  • 使用(linq to sql)更新错误

    我有两个表 通过外键 CarrierID 绑定 Carrier CarrierID CarrierName CarrierID 1 CarrierName DHL CarrierID 2 CarrierName Fedex Vendor V
  • 如何获取 QIcon 的文件/资源​​路径

    假设我做了这样的事情 QIcon myIcon resources icon ico 我稍后如何确定该图标的路径 例如 QString path myIcon getPath 问题是 没有getPath 会员 我找不到类似的东西 但肯定有办
  • 在 C++ 和 Windows 中使用 XmlRpc

    我需要在 Windows 平台上使用 C 中的 XmlRpc 尽管我的朋友向我保证 XmlRpc 是一种 广泛可用的标准技术 但可用的库并不多 事实上 我只找到一个库可以在 Windows 上执行此操作 另外一个库声称 您必须做很多工作才能
  • 使用 Chrome 和 Selenium 设置 LocalStorage

    我正在尝试使用 OpenQA Selenium 和 Chrome 设置本地存储键和值 我认为这相当微不足道 但我似乎无法让它发挥作用 我对 C 很陌生 所以我可能错过了一些东西 无论如何 我有这个功能 public static void
  • C# 粘贴到文本框时检查剪贴板中的字符

    有没有一些方法可以在粘贴到文本框 C 之前仅检查剪贴板中的字符 Ctrl V 和右键单击 gt 粘贴 但不使用 MaskedTextbox 在文本框文本更改中添加规则以仅接受数字 例如 private string value privat
  • 新的 .NET 6 控制台模板中的 C# 函数重载不起作用

    我在尝试重载该函数时遇到错误Print object in the 新的 NET 6 C 控制台应用程序模板 https learn microsoft com en us dotnet core tutorials top level t

随机推荐

  • 使用已知的用户 ID、相册 ID 和相册名称在 Facebook 应用 Android 中打开 Facebook 相册

    我努力了 Facebook 专辑 fb album s owner s 这些都不起作用 我只想打开 Facebook 应用程序并打开相册 None
  • 如何在 macOS 上的 Xcode 动态库中解开从 C++ 导出的符号

    我一直在尝试用 C 开发一个可以在应用程序中运行时加载的动态库 我终于成功了 但它有点难看 我有一个函数 它将指向 C 类的指针作为参数 如下所示 bool registerGrindPlugin Grind PluginManager m
  • 右连接等于左连接吗? [复制]

    这个问题在这里已经有答案了 一段时间以来 我只知道如何使用 INNER JOIN 完全不知道 LEFT RIGHT OUTER JOIN 的作用 虽然 正如我刚刚读到的那样 我看不出右派的目的是什么 在我看来 它与反向 LEFT JOIN
  • 创建与部分用户代理匹配的 WURFL 补丁

    我正在使用 WURFL 来识别用户是否使用移动设备 某些用户代理字符串被错误地识别为移动设备 从而导致内容类型设置不正确 这是一个现实生活中的用户代理的示例 其行为如下 Mozilla 5 0 GTmetrix http gtmetrix
  • 使用openpyxl无法读取excel文件

    我有一个 Excel 文件列表 最后一行类似 它包含有关客户的私人信息 他的名字 姓氏 电话 每个excel文件对应一个客户 我需要制作一个 Excel 文件 其中包含每个客户的所有数据 我决定自动执行此操作 所以查看了openpyxl图书
  • 程序和调试器在没有出现问题的情况下退出

    我正在开发一个 WPF 应用程序 调试时 逻辑达到某个点 然后应用程序无故退出 VS 调试器没有捕获任何内容 唯一的问题指示是输出窗口中的以下内容 程序 6228 SomeApp vshost exe 托管 v4 0 30319 已退出 代
  • 如何从扩展名为 .pyw 的 Python 脚本打印到标准输出?

    我有一个带有 wxpython GUI 和一些命令行参数的 python 程序 我使用 py2exe 生成一个 Windows 可执行文件 我不想在后台有一个命令行窗口 因此 py2exe 使其成为一个没有此窗口的 pythonw 可执行文
  • javascript中如何检查字符串是否以数字开头

    我试图确定用户是否输入了电子邮件 ID 或电话号码 因此我想检查字符串是否以 1或数字开头 以确定它是否是电话号码 如果不是 我得出的结论是这是一封电子邮件 或者我可以检查它是否以字母开头以确定 我该如何检查这个 如果这就是解决方案 我对正
  • 如何在管理器中延迟加载模型以停止循环导入?

    在 Django 中 您可以为模型创建管理器 我通过添加一个名为的新文件来做到这一点managers py在我的模型中objects MyManager 为了停止循环进口 我这样做self model 但是 如果我需要在我的经理中引用不同的
  • 使用 R 操作 shapefile 属性表

    我已经发布了这个关于GIS堆栈交换的问题 https gis stackexchange com questions 64174 how to add a field to a shapefile using r 但流量并不多 我是一名 G
  • 全屏后导航栏下的UIView

    我有一个带有导航栏的应用程序 当我单击应用程序中的照片预览时 它会全屏显示照片 但是当我关闭全屏时 我的控制器的视图位于导航栏下方 我在 StackOverflow 上看到有必要添加这一行 self edgesForExtendedLayo
  • DjangoProject 没有出现在我的 Docker-Image (Docker toolbox for windows home) 中

    我正在尝试使用 docker compose 构建一个 django 项目 例如它在Docker 文档 https docs docker com compose django 我使用 Windows 10 Home 的 Docker 工具
  • _UIFallbackPresentationViewController

    当我关闭通过点击 iPhone 上 UIWebView 中 UIMenuController 上的 定义 打开的字典时 我不断收到以下错误 Unbalanced calls to begin end appearance transitio
  • 如何使用jquery创建动态变量?

    我想要动态创建一些 jquery 变量 在我的代码中 我有一个循环 并且我想使用循环值创建一些变量 这是我的示例代码 array student parent employee each user types function index
  • 如何强制执行软件试用安装的到期日期?

    我需要为我的定制软件提供试用期 我有一个 64 位 C 应用程序 它使用 64 位多处理器支持 DLL 其他要包含的实用程序是用 C 编写的 exe 和 dll 我必须能够加密 C 代码 将软件加密为仅在特定计算机上运行 并强制执行不能通过
  • 使用 Excel 宏/vba 打开/关闭图表系列的可见性

    我正在 Excel 中制作折线图 图表 并将多个数据系列绘制到同一个图表上 我需要创建一个宏 VBA 解决方案 可以通过按下按钮 或复选框等 打开 关闭这些系列的可见性 类似这张图 通过excel菜单系统手动完成 我试图查看所有成员变量 方
  • 在位图图像中设置背景颜色

    我想将画布保存为图像 它可以工作 但背景颜色是黑色 我必须如何添加才能改变颜色 我使用这段代码 Size size new Size surface Width surface Height surface Measure size sur
  • 如何打印带有参数值的调用堆栈?

    功能traceback print stack 打印调用堆栈 如果我们可以看到每个级别的参数值 将有助于调试 但我找不到办法做到这一点 例如 def f1 a 2 f2 a a 1 def f2 a 3 f3 def f3 a 4 prin
  • 为什么 MongoDB 文档建议不要使用 DBREF?

    The DBREF 的 MongoDB 文档 https docs mongodb org manual reference database references say 除非您有令人信服的理由使用 DBRef 否则请使用手动引用 为什么
  • 如何减少对模板函数的调用

    有一个功能 template