当前位置: 首页 > news >正文

C++函数指针,键值对集合的学习

这段代码使用了 std::unordered_map 来存储 std::wstring 作为键(key),而对应的值(value)是一个 std::function<void(std::array<int, 5>, SomeClass&, int)> 类型的函数指针。这个结构使得根据字符串键来动态调用不同的函数成为可能。下面,我将详细解释代码中的每个关键部分。

std::unordered_map

这是一个基于哈希表的关联容器,它允许快速的键值对查找。键(key)是唯一的,并且每个键都映射到一个值。在这个例子中,键是 std::wstring 类型,而值是一个函数指针,封装在 std::function 中。

std::function

std::function 是一个函数包装器,它可以存储、调用或引用任何可调用的目标——函数、Lambda 表达式、函数指针、或其他函数对象。这里,它被用来存储接受三个参数的函数:一个 std::array<int, 5>,一个 SomeClass 的引用,和一个 int

键值对映射

funcMap 中添加键值对:

funcMap[L"action1"] = function1;
funcMap[L"action2"] = function2;

这里,字符串 L"action1"L"action2" 被映射到 function1function2 函数。这意味着当你访问这些键时,可以直接调用相应的函数。

查找和调用函数

使用 find 方法来查找键对应的函数:

if (funcMap.find(variable) != funcMap.end()) {funcMap[variable](myArray, obj, extraInt);
} else {std::wcout << L"No function mapped for this value.\n";
}

这里 find 方法尝试在 funcMap 中找到一个与 variable(这里是 L"action1")匹配的键。如果找到,find 返回一个指向该键值对的迭代器;如果未找到,返回 funcMap.end(),即一个“结束”迭代器,表示容器的末端。如果找到键,就调用映射到的函数,并传入必要的参数。

其他键值对集合

C++ STL 提供了多种键值对容器,包括:

  • std::map:基于红黑树的键值对容器,提供了排序的键和较慢的插入/删除操作。
  • std::unordered_map:基于哈希表的键值对容器,提供了快速的访问速度,但不保证元素的顺序。
  • std::multimapstd::unordered_multimap:这些容器允许多个元素拥有相同的键。

函数指针

在 C++ 中,函数指针是指向函数的指针。在这段代码中,std::function 实际上是一个高级的函数指针,它能够存储和调用任何可调用的实体,不仅仅是普通函数。这使得它在使用上比传统的函数指针更为灵活和强大。

通过使用 std::unordered_mapstd::function,这段代码演示了如何根据字符串键动态调用具有不同参数的函数,这在编写可配置或响应用户输入的程序时非常有用。

http://www.lryc.cn/news/353412.html

相关文章:

  • 新人攻略:避开这3大坑,让老员工主动带你飞!
  • 汽车液态电池隔膜的作用
  • 汽车液态电池充电时,充电时的化学反应是怎样的? 电池电量是怎么充满的?
  • Topk问题以及二叉树的三种层序遍历和基本操作
  • 深度学习设计模式之桥接模式
  • 设计模式 17 组合模式 Composite Pattern
  • 【经典论文阅读10】MNS采样——召回双塔模型的最佳拍档
  • 串行低功耗芯片间媒体总线(SLIMbus)介绍
  • esp32-S3 使用自带的大模型,实现本地文字转语言tts
  • Redis事务(1)
  • 202206青少年软件编程(Python)等级考试试卷(四级)
  • 大作业爬取手机数据,实现手机推荐系统以及朋友圈手机论坛
  • Leetcode 环形链表|| 快慢指针解法
  • 出书,是「盖你自己的房子」你知道吗?
  • 深入探索MySQL SELECT查询:从基础到高级,解锁数据宝藏的密钥
  • 驾校管理系统-手把手调试搭建
  • 知能行——考研数学利器
  • pod 库发布脚本
  • Java 8 新特性:深入理解 Lambda 表达式的强大与应用
  • HTML5 Canvas图形绘制技术应用
  • JMETER工具:以录制手机app为例
  • PDF文件权限密码保护:如何去除及解决方法
  • 【电子信息(工程)】电子通信创新创业教育综合
  • 光伏无人机巡检的工作原理是什么?
  • 泛型中K T V E ? Object等分别代表的含义
  • 常用损失函数学习
  • 判断视频moov的位置
  • python安装依赖
  • 如何利用GitHubAction来发布自己的Python软件包
  • raspberry pi/orienge pi等arm架构硬件打包ros humble docker视觉及机器人开发镜像