c++ - 解释一个字符串,因为它引用程序中的变量。 Geant4台

标签 c++ string eval

所以,我知道这不是语言内置的东西(即 c++ 中没有 eval() 方法)。我还了解到,很难将运行时输入的字符串内容与程序中的变量名相关联,因为大部分信息都消失了。尽管如此……

我正在尝试编写一个小类,以允许我研究组中的用户将 Material 和 Material 属性添加到数据库文件中,并使用一个命令调用这些 Material ,以便在 Geant4 中轻松构建 Material 。不幸的是,Geant4 使用头文件为这些单位定义实际变量,例如 cm3、mm、MeV 和 kg,以将单位转换为内部 Geant4 单位系统。我不相信有任何类型的 map 可以将这些链接到它们相应的字符串。事实上,Geant4 是用于物理建模的,并且有很多单位。我也没有真正的方法可以映射它们,因为 Geant4 是可扩展的,并且可能会出现一些新的物理代码,需要一个我不知道的新单元。

我想做的是从文本文件中获取描述单位的字符串,并以某种方式将其与同名的实际变量匹配,以便我可以执行转换。有什么办法可以解决这个问题,还是完全不可能(或几乎完全不可能)?

当然,我可以让人们将所有数据库条目转换为内部单位,但这很快就会变得丑陋,并且成为难以追踪错误的一大来源(小数点前 15 位看起来很像 14) .

谢谢

最佳答案

这很难回答,部分是因为我从未使用过(或以前听说过)Geant4,部分是因为您并不完全清楚您要做什么:您是否正在为您的同事制作一个 C++ 库直接用?或者您正在制作某种您的同事无需接触 C++ 就可以使用的工具?

不过,我会尽力回答。

从根本上说,如果您想在运行时获取文本输入并解释命名单元,那么您需要一个从单元名称到定义(无论这些定义采用何种内部形式)的映射表。确实没有任何解决办法。

但是,您不一定需要手动创建该映射表。该信息必须存在于定义单位的 Geant4 头文件中,因此您可以编写一个(如您所说的 hack and slash)工具来读取该头文件并为映射表生成代码。

至于在未来支持新的单位,这可能是可能的,但我对你的问题还不够了解,无法提出特定的方法。

不过,我会在这里稍微冒险一下。在 google 上快速搜索 Geant4,然后非常粗略地搜索我找到的第一个源代码,我找到了两个相关文件:SystemOfUnits.h , 和 G4UnitsTable.hh .

我注意到 2准确提供您可能需要的名称到定义的映射,但我不清楚它与系统其余部分的关系以及它是否相关。

如果1是相关的标题,那么很明显,单位的定义是最简单的:即,基本单位的比例因子。如果是这种情况,那么您的 Material 数据库文件不应该包含类似类型的单位定义(即从加载 Material 定义的同一位置加载映射表)没有特别的原因,这将允许您的同事根据需要添加新单位。

我可能会提到最后一种可能性,即我同意,虽然计算十进制数字极易出错,但如果您允许以科学记数法表示值,那么大部分问题都会消失。因此,可能最简单的解决方案是告诉您的同事使用基本的 Geant4 单位,如果他们想要指定一个值,比如说 5 公里,他们应该将其指定为 5e6(因为 Geant4 的基本长度单位是毫米,根据 1 )。

关于c++ - 解释一个字符串,因为它引用程序中的变量。 Geant4台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4551698/

相关文章:

c - 替换字符串中的字符

c++ - Python 到 C++ 字符编码

r - 使用 get() 从卸载的包中调用函数而不使用库

javascript - Socket.io-客户端连接到多个服务器

javascript - 评估后的返回值

c++ - 如何更改可变文件名的文件路径?

c++ - 多进程覆盖率报告

c++ - 在 C++ (Linux) 中使用 Matlab 库

c++ - 我可以在实际函数调用中将静态映射定义为函数参数吗?

java - 如何从该数组中获取随机字符串作为获胜者打印?