首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将字符串解释为引用程序中的变量。Geant4单位

将字符串解释为引用程序中的变量。Geant4单位
EN

Stack Overflow用户
提问于 2010-12-29 13:28:15
回答 1查看 320关注 0票数 0

因此,我理解这不是语言中内置的东西(即c++中没有eval()方法)。我也明白,将运行时输入的字符串的内容与程序中的变量名关联起来是非常困难的,因为大多数信息都会消失。然而..。

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

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

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

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-12-29 20:02:55

这很难回答,部分原因是我从未使用过(或之前听说过) Geant4,部分原因是不完全清楚您正在尝试做什么:您是否正在为您的同事创建一个可直接使用的C++库?或者你正在开发一种你的同事可以在不接触C++的情况下使用的工具?

不过,我会尽我所能回答的。

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

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

至于将来支持新的单元,这可能是可能的,但我真的不太了解您的问题,无法提出特定的方法。

不过,我在这里有点冒险。在谷歌上快速搜索Geant4,然后极其粗略地搜索我找到的第一个源代码,就会找到两个相关的文件:SystemOfUnits.hG4UnitsTable.hh

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

如果1是相关的标头,那么显然单位的定义是最简单的:即缩放系数到基本单位。如果是这种情况,那么您的材质数据库文件没有特别的理由不包含类似类型的单位定义(即,从加载材质定义的同一位置加载映射表),这将允许您的同事根据需要添加新单位。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4551698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档