函数指针有什么用,我将如何使用它们?

2024-01-03

我知道我可以使用函数指针。

有人可以解释为什么要使用它们以及如何使用它们吗?简短的示例代码对我非常有帮助。


一个简单的情况是这样的:根据您的业务逻辑,您有一系列操作(函数)。您有一个哈希函数,可以将输入问题减少到业务逻辑函数之一。干净的代码将具有一个函数指针数组,您的程序将从输入中推断出该数组的索引并调用它。

这是示例代码:

typedef void (*fn)(void) FNTYPE;
FNTYPE fn_arr[5];

fn_arr[0] = fun1; // fun1 is previously defined
fn_arr[1] = fun2;
...

void callMyFun(string inp) {
    int idx = decideWhichFun(inp); // returns an int between 0 and 4
    fn_arr[idx]();
}

当然,回调是最常见的用法。示例代码如下:

void doLengthyOperation(string inp, void (*callback)(string status)) {
  // do the lengthy task
  callback("finished");
}

void fnAfterLengthyTask(string status) {
    cout << status << endl;
}

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

函数指针有什么用,我将如何使用它们? 的相关文章

  • 在 Web 浏览器中禁用 F5 [重复]

    这个问题在这里已经有答案了 可能的重复 禁用浏览器的后退按钮 https stackoverflow com questions 961188 disable browsers back button 如何禁用浏览器上的 F5 刷新 htt
  • 从 Invoke 方法获取 RETURN

    我正在尝试从另一个线程上的列表框项目中读取值 我尝试创建一种新方法来运行调用命令 我可以设法将命令发送到列表框 例如通过调用方法添加 但我似乎无法得到响应 我似乎无法获取该项目的值 我尝试了几种方法 一旦我将它从空变为字符串 事情就开始变得
  • 通过另一个列表更新列表(linq)

    我有类 Data 的对象列表 如下所示 class Data int code string name DateTime date update 我还有另一个课程列表 例如 class RefCodes int old code int n
  • EventHandler 应该始终用于事件吗?

    我一直在愉快地使用自定义委托类型和通用编写事件Action委托类型 没有真正考虑我在做什么 我有一些很好的扩展助手Action and EventHandler这使我倾向于使用那些预定义的委托类型而不是我自己的委托类型 但除此之外 除了惯例
  • 从另一个 FORM 中取回隐藏的 FORM

    我有两种形式Form1 and Form2 我正在打开Form2 from Form1 on button Click Form2 obj2 new Form2 this Visible false obj2 Show 然后我想回来Form
  • C# 和月历,选择多个日期

    我正在制作一个程序 可以帮助人们用 C 为某个部门 预订 订单 他们需要能够选择不同月份的多个日期 我更愿意拥有它 这样他们就可以单击一个日期 然后按住 Shift 键单击另一个日期以选择这两个日期之间的所有日期 并控制单击以进行单选 取消
  • OpenGL缓冲区更新[重复]

    这个问题在这里已经有答案了 目前我正在编写一个模拟水的程序 以下是我所做的步骤 创建水面 平面 创建VAO 创建顶点缓冲区对象 在其中存储法线和顶点 将指针绑定到此 VBO 创建索引缓冲区对象 然后我使用 glDrawElements 渲染
  • 如何查明 .exe 是否正在 C++ 中运行?

    给定进程名称 例如 程序 exe C 标准库没有这样的支持 您需要一个操作系统 API 来执行此操作 如果这是 Windows 那么您将使用 CreateToolhelp32Snapshot 然后使用 Process32First 和 Pr
  • 以下 PLINQ 代码没有改进

    我没有看到使用以下代码的处理速度有任何改进 IEnumerable
  • 为什么 C# 中同一类型的隐式和显式运算符不能共存? [复制]

    这个问题在这里已经有答案了 为什么同一类中两个相同类型的运算符 显式和隐式 不能共存 假设我有以下内容 public class Fahrenheit public float Degrees get set public Fahrenhe
  • 如何调试在发布版本中优化的变量

    我用的是VS2010 我的调试版本工作正常 但我的发布版本不断崩溃 因此 在发布版本模式下 我右键单击该项目 选择 调试 然后选择 启动新实例 此时我看到我声明的一个数组 int ma 4 1 2 8 4 永远不会被初始化 关于可能发生的事
  • 检测 TextBox 中的 Tab 键按下

    I am trying to detect the Tab key press in a TextBox I know that the Tab key does not trigger the KeyDown KeyUp or the K
  • 如何设置消息队列的所有者?

    System Messaging MessageQueue 类不提供设置队列所有权的方法 如何以编程方式设置 MSMQ 消息队列的所有者 简短的答案是 p invoke 对 windows api 函数的调用MQSetQueueSecuri
  • 编写具有多种类型的泛型扩展方法时的类型推断问题

    我正在为 IEnumerable 编写一个通用扩展方法 用于将对象列表映射到另一个映射对象列表 这就是我希望该方法的工作方式 IList
  • 如果在代码中添加元素,“FindName”将不起作用

    在 WPF 应用程序中 如果在 XAML 中声明 ContentControl
  • 如何在 EF Core 2.1 中定义外键关系

    我的 DAL 使用 EF Core 2 1 这就是我的模型的样子 一名用户只能拥有一种角色 Role entity kind of master public class Role public int RoleId get set pub
  • WPF DataGrid - 在每行末尾添加按钮

    我想在数据网格的每一行的末尾添加一个按钮 我找到了以下 xaml 但它将按钮添加到开头 有人知道如何在所有数据绑定列之后添加它吗 这会将按钮添加到开头而不是末尾
  • 使用 Unity 在 C# 中发送 http 请求

    如何使用 Unity 在 C 中发送 HTTP GET 和 POST 请求 我想要的是 在post请求中发送json数据 我使用Unity序列化器 所以不需要 新的 我只想在发布数据中传递一个字符串并且能够 将 ContentType 设置
  • 用数组或向量实现多维数组

    我想使用单个数组或向量实现多维数组 可以像通常的多维数组一样访问它 例如 a 1 2 3 我陷入困境的是如何实施 操作员 如果数组的维数为 1 则 a 1 应该返回位于索引 1 处的元素 但是如果维数大于一怎么办 对于嵌套向量 例如 3 维
  • 运行 xunit 测试时无法将输出打印到控制台窗口

    public class test2InAnotherProject private readonly ITestOutputHelper output public test2InAnotherProject ITestOutputHel

随机推荐

  • Facebook 身份验证 API

    我是 facebook API 的新手 我有一些与 facebook 身份验证相关的问题 我已经创建了一个应用程序并编辑了域和 url 网站域名 礼品网 站点网址http www giftme web44 net http www gift
  • 如何在角度组件内提供/模拟 Angularfirestore 模块以通过默认测试?

    如何在我的 app component 中提供 AngularFirestore 模块 以便我的默认toBeTruthy 测试会通过吗 Error StaticInjectorError DynamicTestModule AppCompo
  • 结合绑定到 tableView 处理网络错误(Moya、RxSwift、RxCocoa)

    我目前正在使用 Moya 发出网络请求 我已经从示例项目之一实现了以下内容 https github com DroidsOnRoids RxSwiftExamples tutorials https github com DroidsOn
  • PHFetchResults 日期过滤器未生成时间范围的正确结果

    我正在尝试从照片库中获取两个日期范围内的图像我成功获取图像 https stackoverflow com questions 39587405 how to fetch images from photo library within r
  • .emacs 中区分大小写的 setq 没有效果

    我的 emacs 文件中有很多自定义内容 字体 颜色 窗口大小 键绑定等 所有这些都有效 然后在最后 我只是添加了一个 setq case fold search nil 这是一个变量 当设置为nil应该使搜索在所有 emacs 模式下区分
  • pandas.errors.EmptyDataError:没有要从文件中解析的列

    我创建了一个列表数据类型 它具有三个文件夹的路径 其中每个文件夹都有很多 txt 文件 我试图通过使其成为 pandas 数据框来处理文件夹中的每个文件 但我收到了列出的错误 CODE for l in list for root dirs
  • 在新窗口中打开 Chrome(Chrome 应用)

    我正在尝试创建一个 chrome 应用程序 当我单击按钮时 它会打开一个新的 chrome 窗口 目前它只是打开一个新选项卡 html
  • 如何检查一个值的位奇偶校验是偶数还是奇数?

    一个值有偶校验 https en wikipedia org wiki Parity bit如果它有偶数个 1 位 如果某个值具有奇数个 1 位 则该值具有奇数奇偶校验 例如 0110具有偶数奇偶性 并且1110有奇校验 我必须回来1 if
  • Safari:在卸载之前

    前提条件 你应该在狩猎10 您好 我在请假时遇到困难 保持确认框在不同浏览器中显示在我的页面上 请前往https www biznessapps com cms https www biznessapps com cms 并使用以下凭据登录
  • 在 Chrome 中使用 window.location.reload 从缓存加载和哈希片段不起作用

    我需要用 Javascript 重新加载页面 我用window location reload为了这个目的 现在 我在 Chrome 中观察到一个奇怪的行为 Chrome 总是连接到服务器并询问文档是否被修改 虽然一个304 Not Mod
  • 重新创建 iOS 7 日历 UIView 动画

    每个人都知道 iOS 7 日历应用程序中全新的精彩动画 您可以在这段短视频中看到它们 http vimeo com 69247779 http vimeo com 69247779 我会重新创建类似的东西 创建一个 模式 矩形 当用户点击时
  • 在 ios 7.1 中自定义按钮形状

    苹果已经添加了纽扣形状 http www todaysiphone com 2014 03 switch button shapes ios 7 1 iOS 7 1 中的功能 但我需要让它在我的应用程序中禁用或更改其默认颜色 形状以匹配我的
  • 关于 Android 活动

    我面临着一个与相关的大问题Activity 我的场景如下 我启动活动 A 单击一个按钮 然后从图库中选择一张图像 然后在onActivityResult我打了电话startActivity B 现在 在我的活动 B 中 A 中选择的图像已显
  • AVL树的最小节点数?

    我知道AVL树中最小节点数的公式是 S h S h 1 S h 2 1 然而 我真的不知道如何使用这个函数 假设我们的 AVL 高度为 6 答案告诉我最小值 7 4 1 12 但是你如何得到这个数字呢 我的意思是 当你插入 6 时 不是 6
  • 函数对象属性 __kwdefaults__ 有什么用?

    函数对象有属性 defaults and kwdefaults 我发现如果一个函数有一些默认参数 那么它们将作为一个元组放入 defaults but kwdefaults is None 何时使用属性 kwdefaults def foo
  • 尝试使用 os.makedirs 时出现“OSError:[Errno 17] 文件存在”[重复]

    这个问题在这里已经有答案了 我在集群系统上有几个从 Python 并行运行的线程 每个Python线程输出到一个目录mydir 每个脚本在输出之前检查是否mydir存在 如果不存在则创建它 if not os path isdir mydi
  • 汇编“下面”是否有编程语言? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 防止 CHARACTER VARYING 字段中出现空字符串

    我正在使用 PostgreSQL 并希望阻止某些必需的 CHARACTER VARYING VARCHAR 字段允许空字符串输入 这些字段还需要包含唯一值 因此我已经使用了唯一约束 但是 这并不能阻止原始 唯一 空值 基本示例 其中用户名需
  • 如何使用 MFC 应用程序 (C++ Visual Studio 2010) 中的按钮更改图像的可见属性?

    我正在尝试制作一个程序 当按下应用程序中某个名为 隐藏 的按钮时 图像就会消失 我知道在 Windows 窗体应用程序中它会是这样的 pictureBox1 gt Visible true false 但该代码在 MFC 中不起作用 我在M
  • 函数指针有什么用,我将如何使用它们?

    我知道我可以使用函数指针 有人可以解释为什么要使用它们以及如何使用它们吗 简短的示例代码对我非常有帮助 一个简单的情况是这样的 根据您的业务逻辑 您有一系列操作 函数 您有一个哈希函数 可以将输入问题减少到业务逻辑函数之一 干净的代码将具有