如何从存储在 char* 指针中的 name 调用 c 函数?

2024-06-24

我想通过函数的名称动态调用函数,例如,假设有以下函数和字符串:

void do_fork()
{
   printf ("Fork called.\n");

}

char *pFunc = "do_fork";

现在我需要打电话do_fork()就在*pFunc。那么这可能吗?

欢迎 C/C++ 代码,非常感谢!


C 和 C++ 都没有足够的反射来开箱即用地执行此操作,因此您必须实现自己的方案。

在 C++ 中,或多或少规范的方法是使用字符串到函数指针的映射。像这样的事情:

typedef void (*func_t)();
typedef std::map<std::string,func_t> func_map_t;

// fill the map
func_map_t func_map;
func_map["do_fork"] = &do_fork;
func_map["frgl"] = &frgl;

// search a function in the map
func_map_t::const_iterator it = func_map.find("do_fork");
if( it == func_map.end() ) throw "You need error handling here!"
(*it->second)();

当然,这仅限于具有完全相同签名的函数。但是,可以通过使用来稍微解除此限制(以包含合理兼容的签名)std::function and std::bind而不是普通的函数指针。

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

如何从存储在 char* 指针中的 name 调用 c 函数? 的相关文章

随机推荐

  • 删除打印为 PDF 的选项

    当单击 Crystal 报告的打印按钮时 我看到以下内容 我不想先导出为 PDF 我只想在按下 打印 按钮时立即打印 我该如何配置此行为 听起来你想使用PrintToPrinter方法 根据 MSDN 将报表的指定页面打印到使用 Print
  • Prolog — 对称谓词

    我必须在序言中模拟家谱 我有对称谓词的问题 Facts parent x y male x female y age x number Rules blood relation让我头疼 这就是我所做的 blood relation X Y
  • Qt 覆盖小部件快捷方式(窗口快捷方式)

    我有一个 Qt 应用程序 其中在 Qt Designer 表单操作中定义了多个窗口快捷方式 这些快捷键效果很好 直到焦点位于处理相同组合的小部件上 覆盖我的窗口快捷键 时按下它们 我想要相反的行为 窗口快捷方式覆盖聚焦的小部件快捷方式 我尝
  • 如何将oracle中的number(7,2)更改为varchar?

    I m using Oracle 10g I want to append to all values in sal column To acomplish this first I m trying to change data type
  • Boost:bjam 如何构建库名称?

    我在查看 jam 文件 了解库的名称是如何构造的 例子 libboost log mgw46 mt 1 48 dll 我想忽略最后一部分 即如何使用我构造的名称传递链接器 o 参数 我的版本很少 并且在一个大项目中链接迫使我对项目文件进行更
  • 从 aws Glue 脚本调用存储过程

    ETL 作业完成后 在 AWS Glue 脚本中调用存储过程的最佳方式是什么 我正在使用 PySpark 从 S3 获取数据并将其存储在临时表中 在这个过程之后 需要调用一个存储过程 该存储过程将数据从临时表加载到相应的 MDS 表中 如果
  • Firebase Cloud Function:multipart/form-data 出现“意外的表单结束”错误

    我正在尝试在我的 Cloud Function Express 应用程序上创建文件上传路由 我尝试过不同的模块 例如formidable multer and busboy 但是在使用 firebase 模拟器运行服务器时 没有一个可以逃脱
  • J=1 且 W=Majority 的 MongoDB 副本集上是否仍会发生回滚?

    我一直在阅读文档 根据我的理解 我可以看到仍然可能发生回滚的情况 写入到主数据库 确认日志已写入磁盘 大多数辅助节点确认写入但不写入磁盘 整个集群断电 当电源恢复时 主设备由于某种原因无法启动备份 次要角色扮演主要角色 最初的主节点最终启动
  • MySQL 转储 CronJob

    我正在尝试创建一个 cron 来每天备份我的 MySQL 从站 backup sh内容 bin bash Backup mysql from slave sudo mysql u root p xxxxx e STOP SLAVE SQL
  • Android ListView 复选框选择

    我在这里有一个由两部分组成的问题 1 如何填充我的ListView以便显示字符串 但是当选择项目时 不可见的id值 来自手机联系人的联系人id 是实际使用的值 2 我有一个使用 multipleChoice 模式进行项目选择的 ListVi
  • Node.js 中的 Python 多处理 - 在子进程上打印不起作用

    我有一个运行客户端界面的 Node js 应用程序 该界面公开触发机器学习任务的操作 由于在实现机器学习相关内容时 Python 是更好的选择 因此我实现了一个按需运行机器学习任务的 Python 应用程序 现在 我需要集成这两个应用程序
  • MongoDB list集合过滤器

    我正在使用 Node js 我正在尝试过滤必须排除集合 出口 的集合并检索所有其他集合 但我似乎无法弄清楚语法 我试过了 db listCollections filter outlets toArray err docs 有什么建议么 您
  • 如何将位图转换为文件而不压缩

    我需要从服务器下载图像并以其原始质量保存 但显然保存后图像被压缩并且质量下降 我使用 android async http 库来处理 http 请求 我的请求和保存文件的代码 AsyncHttpClient client new Async
  • 从 WPF 窗口中删除图标

    我可以使用 WinApi 从 WPF 窗口中删除窗口图标 但是当我仅运行 WPF 项目的可执行文件时 我会在应用程序窗口中再次获得该图标 如何删除该图标 From WPF教程 http www wpftutorial net RemoveI
  • 构建表达式树

    我正在努力思考如何为更多 lambda 构建表达式树 如下所示 更不用说可能有多个语句的东西了 例如 Func
  • Python语法错误:无法分配给模块中的运算符,但可以在解释器中工作

    我有一根绳子a我想根据它的长度将它分成两半 所以我有 a front len a 2 len a 2 这在解释器中工作正常 但是当我从命令行运行模块时 python 给了我一个SyntaxError can t assign to oper
  • 如何使 Cucumber 功能作为本地单元测试在 Android 项目中运行?

    我有一个用 Java 编写的 Android 项目 正在 Android Studio 中进行 我想使用 Cucumber 对一些内部组件进行集成测试 注意 我知道这不是 BDD 方式 但对我来说很有用 我希望测试运行为本地单元测试 htt
  • WSO2 Identity Server 5.0.0 无法从辅助用户存储中为用户返回 SAMLResponse 中的用户声明

    我在使用 SAML SSO 身份验证时遇到此问题 我已经成功设置了 WSO2IS 5 0 0 身份服务器 我还成功设置了 至少我希望如此 辅助用户存储 我使用 JDBCUserStoreManager 实现 我已将此商店设置为 DOMAIN
  • 微服务中的事务

    我读过一些关于微服务架构的文章 但没有人涉及事务的主题 他们都说这很难做到 也许有人可以描述如何处理这个问题 但不是从领域方面 而是从技术方面 假设我们有一个业务案例 我们需要调用两个不同的服务 并且它们都对数据库进行一些更改 但是如果第二
  • 如何从存储在 char* 指针中的 name 调用 c 函数?

    我想通过函数的名称动态调用函数 例如 假设有以下函数和字符串 void do fork printf Fork called n char pFunc do fork 现在我需要打电话do fork 就在 pFunc 那么这可能吗 欢迎 C