检索 C++ 程序中的所有函数 [关闭]

2024-01-16

假设我们有一个定义了函数的 C++ 程序,我们称之为input.cpp.

现在,我有另一个 C++ 程序retrieve.cpp必须“检索”中的所有功能input.cpp在运行时(或者甚至是它的目标文件,如果这可以帮助的话!)。

我所说的“检索”是指获得类似的东西std::list<std::string>其中每个元素是字符串的标题,或者std::list<std::function>或任何其他类似的解决方案。

在此过程中拥有良好的表现非常重要。

为什么我需要它: In 这个帖子 https://stackoverflow.com/questions/36685492/perfect-hash-function-generator-for-functions我正在尝试映射函数子集(用户定义)来实现记忆化 https://en.wikipedia.org/wiki/Memoization框架。正如有人在评论中建议的那样,映射目标程序内的所有函数可能会更具性能。这个问题来自于枚举/索引程序内所有函数的必要性。


您可以通过查看目标文件的内容找到所有导出器符号。在 Windows 上,您可以使用诸如为此,在 Linux 上,nm http://linux.die.net/man/1/nm就是您要找的机器人。

但是,这不会向您显示“内部”符号;而是会向您显示“内部”符号。符号未导出到目标文件中。

如果您只想要函数的特定子集并且控制它们的源,您可能会编写某种可怕的宏来将函数的名称存储在某处(您必须更改您感兴趣的每个函数声明,如果你沿着这条路走了)。我根本不推荐这样做,但它是最后的手段。

如果您谈论的是运行时检查,那么当您听说 C++ 没有任何类型的内置反射时,您会感到难过。可以通过库提供不同程度的元数据(请参阅here https://stackoverflow.com/questions/41453/how-can-i-add-reflection-to-a-c-application,但从根本上讲,这是需要在编译器内部发生的事情,因为在翻译阶段之后会丢失很多信息。

如果您需要在运行时访问此信息,那么您最好的选择可能是“预处理”对象文件(使用我之前提到的对象文件检查程序),将其写入文件,然后让您的程序读回该文件建立起std::list你提到。

这也值得问问自己why你想要这样做;对于您的实际问题可能有更合适的解决方案(请参阅XY问题 https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem).

Update

现在您已经更新了您的帖子并说明了为什么要这样做,这一切都变得更有意义了。如果您想记住函数调用,那么您可以看看完美转发 http://eli.thegreenplace.net/2014/perfect-forwarding-and-universal-references-in-c/ and 可变参数模板 http://en.cppreference.com/w/cpp/language/parameter_pack;您可以存储函数参数的“缓存”并返回结果(如果之前已经调用过该结果)。

您不想在全局范围内应用此功能,因为某些函数不是纯函数(即它们具有副作用,并且记住它们可能会破坏大量代码);确保让用户选择记住哪些功能。

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

检索 C++ 程序中的所有函数 [关闭] 的相关文章

  • WPF DataGrid 多选

    我读过几篇关于这个主题的文章 但很多都是来自 VS 或框架的早期版本 我想做的是从 dataGrid 中选择多行并将这些行返回到绑定的可观察集合中 我尝试创建一个属性 类型 并将其添加到可观察集合中 它适用于单个记录 但代码永远不会触发多个
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • 通过引用传递 [C++]、[Qt]

    我写了这样的东西 class Storage public Storage QString key const int value const void add item QString int private QMap
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • 访问外部窗口句柄

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

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

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

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

    我正在尝试编写一个函数 该函数查找行为 4 列为 4 的二维数组中的最大值 其中二维数组填充有用户输入 我知道我的主要错误是函数中的数组 但我不确定它是什么 如果有人能够找到我出错的地方而不是编写新代码 我将不胜感激 除非我刚去南方 我的尝
  • 如何在当前 Visual Studio 主机内的 Visual Studio 扩展中调试使用 Roslyn 编译的代码?

    我有一个 Visual Studio 扩展 它使用 Roslyn 获取当前打开的解决方案中的项目 编译它并从中运行方法 程序员可以修改该项目 我已从当前 VisualStudioWorkspace 成功编译了 Visual Studio 扩
  • 比较数组中的文件、从文本文件中删除行、函数、日志记录

    所以我创建了这两个数组 Approved Shares 和 Current Shares Reads Approvedshare txt and makes the txt file into an array public objFSO
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • 什么是异地退货?

    什么是非本地退货 什么场景下有用 请举个例子来解释一下 这是一篇好文章 http yehudakatz com 2010 02 07 the building blocks of ruby 关于在 ruby 块的上下文中使用非本地返回 Ru
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现

随机推荐

  • OAuth 自定义提供程序 C#

    我需要创建一个自己的 OAUTH 提供商 以验证第三方应用程序请求 我不想使用 Google Twitter LinkedIn Microsoft 提供商 我必须创建自己的提供程序来验证请求并向客户端返回访问令牌 但网上的所有帮助都与外部提
  • 授权属性的 MVC5 声明版本

    我正在使用 MVC5 和新的 OWIN 身份验证中间件尝试 VS2013 RC 中的一些新功能 所以 我习惯使用 Authorize 属性来按角色限制操作 但我正在尝试使用基于声明 活动的授权 但我找不到它的等效属性 我是否缺少一个明显的东
  • XMPP Bosh 与 SignalR

    XMPP相对于SignalR有更多优势吗 它们都使用 http 长轮询机制 我无法决定是否应该使用 XMPP 作为我的聊天应用程序 还是应该使用 SignalR 并将所有内容保留在我的 IIS 服务器上 SignalR 使用多种传输方式 请
  • 如何在源代码中强制执行单线程构建

    背景 我为一些非常专业的数据处理创建了许多小型实用程序 通常 我是唯一的用户 我什至没有考虑多线程编程 因为运行时性能对于我的用例来说已经足够了 关键资源是我的编程时间 所以我想避免多线程编程所需的任何额外工作 然而 当我将来重用我的代码时
  • android - “您的设备与此版本不兼容”

    我在 Play 商店中放置了一个应用程序 我运行 4 1 Nexus 7 的朋友在尝试安装我的应用程序时收到以下消息 您的设备与此版本不兼容 为什么这个来了 请任何人帮助我 Manifeast file lt xml version 1 0
  • Android 中 Google 地图标记周围的脉冲环动画

    我想在 Android google mapFragment 中的蓝点当前用户位置添加脉冲环动画 如 Uber 有人能帮我解决这件事吗 我找到了向标记添加脉动动画的解决方案 这是地图部分 这里变量 map 表示您的地图 private Ci
  • 如何优化以下for循环代码?

    我有一个非常大的数据集 我正在使用以下代码 计算花费了太多时间 我想减少迭代次数 如何提高代码的性能 import numpy as np Z np asarray 1 2 3 4 5 6 7 8 R np asarray 1 2 3 4
  • Firestore Timestamp.fromDate 不是 UTC

    有人知道如何在 Firestore 中保留 UTC 时间戳吗 In my Angular应用程序 如果我将今天的日期转换为如下所示的时间戳 我最终会得到一个UTC 2 瑞士现在是夏令时 Firestore 数据库中的日期 import fi
  • GAE NDB 安装已部署

    我的 Google App Engine 应用程序使用数据存储区 NDB 所以我要导入 from google appengine ext import ndb 但是当我部署并转到我的应用程序时出现错误 ModuleNotFoundErro
  • 剧作家未收到事件

    我对编剧有意见page waitForEvent https playwright dev docs api class page page wait for event 我希望我的测试在单击链接后导航到不同页面后等待我们的应用程序触发的特
  • 将 openCV C++ 视频流式传输到浏览器

    我正在尝试使用 C 中的 openCV 捕获内置网络摄像头 并进行一些处理 到目前为止 这是有效的 现在我想将网络摄像头流式传输到浏览器 我怎样才能实现这一目标 Should I create a WebSocket Or use a UP
  • 如何将Toast的动态位置设置到视图?

    首先这不是完整的代码 Override public void onCheckedChanged CompoundButton buttonView boolean isChecked Toast toast Toast makeText
  • 如何调试 HTTP 502 错误?

    我有一个 Python Tornado 服务器位于 nginx 前端后面 我偶尔 但不是每次 都会收到 502 错误 我查看 nginx 访问日志 看到以下内容 127 0 0 1 02 Jun 2010 18 04 02 0400 POS
  • python中岭回归的p值

    我正在使用岭回归 ridgeCV 我已经从以下位置导入了它 从 sklearn linear model 导入 LinearRegression RidgeCV LarsCV Ridge Lasso LassoCV 如何提取 p 值 我检查
  • 我们可以从适配器调用startActivityForResult吗?

    是否可以有方法onActivityResume within adapter 称呼startActivityForResult 是的 只需在适配器的构造函数中将活动的上下文传递给适配器即可 此处存储为 mContext 在getView中
  • 仅在专门调用时运行 gradle 任务

    我有一个build gradle创建 java 文件WAR文件 该文件在 Docker 多阶段构建的一个阶段中使用 以生成我在生产 暂存等中使用的 Docker 映像 配置文件 机密位于映像之外 但在开发中 虽然大多数时候我使用普通构建来生
  • 在javascript中将小数转换为六十进制(以六十为基数)

    将十进制数 以十为基数 转换为以 0 9 A Z 和 a x 作为数字的字符串表示的六十进制 以六十为基数 的最佳方法是什么 我计划用 javascript 对其进行编码 但感谢您的帮助 使用示例 gt gt decToSex 60 10
  • RStudio read.xl工作目录错误

    大家好 我在将 xlsx 加载到 RStudio 时遇到困难 我不确定为什么 RStudio 无法看到该文件 我指定的 read excel 路径是否错误 有任何想法吗 R 的新人 Thanks Windows 10 64 位 版本 0 9
  • OpenCL 中的矩阵求逆

    我正在尝试使用 OpenCL 加速一些计算 算法的一部分包括反转矩阵 是否有任何开源库或免费可用的代码来计算用 OpenCL 或 CUDA 编写的矩阵的 lu 分解 lapack dgetrf 和 dgetri 或一般求逆 该矩阵是实数且为
  • 检索 C++ 程序中的所有函数 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 假设我们有一个定义了函数的 C 程序 我们称之为input cpp 现在 我有另一个 C 程序retrieve cpp必须 检索 中的所有功