首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++等价于Fortran

C++等价于Fortran
EN

Stack Overflow用户
提问于 2019-05-18 11:51:20
回答 1查看 922关注 0票数 0

我的问题与C等价于Fortran名称几乎完全相同

关键的区别在于,我使用的是C++/17,我想知道是否有更多的C++惯用的方式来解决这个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-18 18:39:34

这与Fortran的纳梅利斯特在C++中是不一样的。没有一种便携的方法来实现这一目标。

如果您想实现类似的构造,那么需要一些通用的解析函数来处理istream上的行:

  • 它会读取行,忽略"!"后面的任何内容;
  • 它将读取第一个"&"后面的名称,以查看它是否与预期的名称匹配;
  • 当遇到线路上唯一的"/"时,它将停止阅读;
  • 它将解析中间的每一行,找到具有变量名称的字符串( "=" )和一个在相等操作符右侧具有值的字符串,并将这两个字符串存储在一个std::map中。

对于即席阅读,您可以调用解析函数将istream行转换为map。然后访问映射来初始化变量。一种简单而强大的方法是使用stringstream sst(my_map["variable name"]); sst>>my_variable;

如果名称列表或多或少与classstruct X相对应,则成语将是重载friend istream& operator>> (istream&, X&);。然后,这个重载的提取器将像在特殊情况下一样工作,以初始化成员变量。

当然,我在一定程度上简化了算法,因为您还需要处理输入文件中的错误:如果缺少预期变量,怎么办?如果读取的值与目标变量不兼容,怎么办?

如果您要将Fortran代码迁移到C++,并且必须使用Namelist来避免中断,这可能是一种可移植的前进方式。

但是,如果这只是您的习惯,并且文件格式不是强制性的,那么您可以考虑使用json,其中一个库可以读取和写入这种格式(链接页面中列出了22个库)。优点是你不必重新发明轮子,你可以更好地与许多其他语言交流,而json似乎更能证明未来。

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

https://stackoverflow.com/questions/56198656

复制
相关文章

相似问题

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