如何传递通用函数指针作为参数

2023-11-30

我有几个具有类似声明的函数:

int foo(int a);
int bar(int a);
int test(int a);

我的消息处理程序的逻辑完全相同:

void HandleFoo(int a) {
    process(a);
    int ret = foo(a);
    if (ret) 
        print(a);
}

void HandleBar(int a) {
    process(a);
    int ret = bar(a);
    if (ret) 
        print(a);
}

void HandleTest(int a) {
    process(a);
    int ret = test(a);
    if (ret) 
        print(a);
}

所以我想知道是否可以编写一个通用函数:

void Handle(int a, func_pointer fn) {
    process(a);
    int ret = fn(a);
    if (ret) 
        print(a);
}

The fn就像一个通用函数指针,可以接受foo, bar and test

这可能吗?

顺便说一句,目前我的项目中没有 C++11 和 boost,仅使用 TR1。


您可以使用模板

示例(不完全是您的代码):

int add1(int n) { return n + 1; }
int add2(int n) { return n + 2; }

template<typename Adder>
void AddHandler(int n, Adder adder)
{
    int r = adder(n);
    std::cout << r << std::endl;
}

int main(void)
{
    AddHandler(1, add1);
    AddHandler(3, add2);

    return 0;
}

输出符合预期:

2
5

你可以在这里看到它的直播http://ideone.com/q3FyI5

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

如何传递通用函数指针作为参数 的相关文章

随机推荐

  • 通过 自动播放并重新启动 YouTube 视频

    如何在不点击按钮的情况下自动播放 YouTube 视频
  • 如何为 PyInstaller 可执行文件指定 Python 版本和库版本

    使用 PyInstaller 创建可执行文件时 如何捆绑特定的 Python 解释器和特定版本的某些库 我想从 py 脚本创建一个可执行文件 我的 main py从网站下载一些数据并进行转换 然后将它们作为 Excel 文件保存在文件夹中
  • 在 Shell 脚本中创建数据库 - 从 PHP 转换

    我有以下 PHP 代码 用于创建数据库 用户并向用户授予权限 con mysql connect IP ADDRESS user pass mysql query CREATE DATABASE dbuser con or die mysq
  • 不规则行为 - XAML/UWP 社区工具包缩放动画

    问题 我正在使用 UWP Community Toolkit Scale 动画 它对于大多数图像都按预期工作GridView 但对于某些人来说 图像超出了界限 请看下图 我发现当图像宽度超过图像高度的 2 倍 2 倍 时会出现此问题 那是图
  • 如何使用geom_text在堆积条形图中显示值?

    我想在堆积栏中显示百分比数字 然而 有一组的比例非常低 两个值相互重叠 我更改为 位置 身份 它仍然不起作用 有什么想法吗 x4 can m lt structure list canopy structure c 1L 2L 3L 1L
  • Spring Cloud Task 和 Spring Batch 之间的区别?

    我经历了Spring Cloud任务介绍 但以下问题尚不清楚 我正在使用 Spring Batch 有什么用Spring Cloud 任务当我们已经拥有 Spring Batch 提供的元数据时 我们计划使用 Spring Cloud Da
  • 通过 MATLAB 发送电子邮件

    我需要通过 MATLAB 发送电子邮件 并且我已经阅读了 sendmail 的说明以及这里的许多答案 我已经尝试了 3 个电子邮件提供商 但我无法真正使用其中任何一个 Gmail 只有停用防病毒软件后才能发送电子邮件 Hotmail 和雅虎
  • PHP 与继承类的协方差 - 声明不兼容

    我想创建一个带有抽象方法的抽象类 它允许返回类型中的抽象类型 在我的最后一堂课中 我希望用实现最初声明的抽象类型的类型覆盖返回的类型
  • 如何在 NSUserDefaults 中存储自定义对象

    对于重复的问题 我深表歉意 我是 ios 新手 我想将自定义对象存储在用户默认值中 我正在使用 Objective c 提前致谢 首先 您创建自定义类 如下所示 自定义对象 h import
  • 在Python中比较两个日期字符串[重复]

    这个问题在这里已经有答案了 假设我有一个字符串 10 12 13 和 10 15 13 如何将它们转换为日期对象以便可以比较日期 例如 查看哪个日期之前或之后 Use datetime datetime strptime gt gt gt
  • 使用 .NET 访问类似 netstat 的数据

    我想知道是否有任何方法可以访问 NET 框架内丢弃的数据包数量等信息 我知道 Win32 PerRawData 和 Ip Helper API 提前致谢 您可以使用 PerformanceCounter 类 运行 Perfmon exe 以
  • 处理来自 SQLAlchemy Join 的 Pandas DataFrame 构造函数中的重复列

    我知道read csv has mangle dup cols但是在发出以下命令后 如何从 sqlalchemy 中的 sql join 执行相同的操作 pd DataFrame result fetchall columns result
  • 远程关闭 iOS 推送通知

    适用于 iOS 的 Gmail 应用程序能够在应用程序未运行时接收推送通知 就像大多数电子邮件应用程序一样 但是 当用户收件箱的未读计数为零时 它也能够从设备中清除所有 Gmail 推送通知 即使应用程序没有运行 这是一个示例序列 1 在您
  • 访问 Mac 沙盒应用程序中的 sidecar 文件

    我需要在基于文档的照片编辑器应用程序中访问 sidecar XMP 文件 图像文件是文档 当用户打开并保存图像文档时 我需要访问 sidecar XMP 文件 是否可以在基于沙盒文档的应用程序中访问 sidecar 文件 例如 XMP 我知
  • 同时进行数组过滤和映射?

    我感觉自己像个白痴 但我需要过滤我的数组 然后映射这些值 但那是 O 2N 在 O N 中完成这一切会更有意义 但我找不到库存数组 原型函数 array filter item gt item revenue map item gt ite
  • 如何检查输入是否是有效的浮点数? [复制]

    这个问题在这里已经有答案了 我正在做一项任务 我获取用户的输入来检查他们的输入是否是浮点数 我已经掌握了大部分情况 但是我该如何处理用户在输入中输入多个小数 的情况呢 即 431 541 def is valid float string
  • 在闪亮中使用“withProgress”

    我试图了解 进度指示器 如何闪亮工作 因此我创建了一个循环 虚构 运行时间约为 7 秒 1 8GHz 我想在用户单击 Go 按钮后显示进度条 这是代码 ui lt fluidPage headerPanel Progress indicat
  • Java的clone()方法

    我读过 J Bloch 的 Effective Java 其中写道 如果您设计一个用于继承的类 请注意 如果您选择不 为了提供一个行为良好的受保护克隆方法 它将是 子类不可能实现 Cloneable 我有A类 public class A
  • 计算帕斯卡的小数位数

    我刚刚开始学习 pascal 我必须做一个 pascal 程序作为作业 我做到了 但我不知道如何计算实数中的小数位数 后的位数 我需要它只是为了很好地格式化一个实数 比如write real 0 dec where dec是我不知道如何知道
  • 如何传递通用函数指针作为参数

    我有几个具有类似声明的函数 int foo int a int bar int a int test int a 我的消息处理程序的逻辑完全相同 void HandleFoo int a process a int ret foo a if