Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将字符串解释为它引用程序内变量。Geant4单位_C++_String_Eval - Fatal编程技术网

C++ 将字符串解释为它引用程序内变量。Geant4单位

C++ 将字符串解释为它引用程序内变量。Geant4单位,c++,string,eval,C++,String,Eval,因此,我知道这不是语言中内置的东西(即c++中没有eval()方法)。我还了解到,在运行时将字符串输入的内容与程序中的变量名相关联是非常困难的,因为大部分信息都消失了。然而 我正在尝试编写一个小类,允许我的研究小组中的用户将材料和材料属性添加到数据库文件中,并通过一个命令调用这些材料,以便在Geant4中轻松构建材料。不幸的是,Geant4使用头文件定义这些单位的实际变量,如cm3、mm、MeV和kg,以将单位转换为内部Geant4单位制。我不相信有任何类型的映射将这些链接到它们对应的字符串。事

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

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

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

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


谢谢

这很难回答,部分原因是我以前从未使用过(或以前听说过)GeANT4,部分原因是你不太清楚你在做什么:你在为C++的同事制作直接使用的C++库吗?或者,你是在制作一种工具,你的同事可以在不接触C++的情况下使用它吗? 不过,我会尽力回答

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

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

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

不过,我会在这里冒险一点。在谷歌上快速搜索Geant4,并通过我找到的第一个源代码进行极其粗略的搜索,我找到了两个相关的文件:,和

我注意到它提供了您可能想要的从名称到定义的映射,但我不清楚它与系统其余部分的关系,因此也不清楚它是否相关

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


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

我没有考虑将基本单位定义放入数据库文件并创建单位表。这真是个好主意。谢谢