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

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(使用前将#替换为@)

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

  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • 根据属性的类型使用文本框或复选框

    如果我有这样的结构 public class Parent public string Name get set public List
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • 需要帮助优化算法 - 两百万以下所有素数的总和

    我正在尝试做一个欧拉计划 http projecteuler net问题 我正在寻找 2 000 000 以下所有素数的总和 这就是我所拥有的 int main int argc char argv unsigned long int su
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 使用 C# 中的 CsvHelper 将不同文化的 csv 解析为十进制

    C 中 CsvHelper 解析小数的问题 我创建了一个从 byte 而不是文件获取 csv 文件的类 并且它工作正常 public static List
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi

随机推荐

  • 使用已知的用户 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