Fortran中的STL模拟

时间:2014-07-27 08:21:40

标签: c++ stl fortran

基础:我有非常大的并行Fortran90 / MPI程序,它代表复杂的物理模型。我想为它添加新功能:例如,我需要组织消息队列,在某处引入mergesort并使用哈希表。

问题:我知道如何写自己的写哈希表,创建队列和代码合并,但我不认为发明一辆自行车是个好主意。

问题: Fortran大师在这种情况下应该做些什么?我是否应该构建与Fortran的C ++类绑定并使用STL实现逻辑,或者您可以建议一些类似Fortran STL的库?谢谢。

2 个答案:

答案 0 :(得分:11)

Fortran中没有模板,因此没有STL。对于某些通用库,您可以尝试FLIBS。它通常使用transfer()技巧来实现通用编程。

有一个预处理器可以为Fortran添加一些模板,并附带一些小的STL,您也可以尝试使用PyF95++。如果您可以通过某些图书馆访问学术论文,则可以阅读here

我会避免在这种特殊情况下将它与C ++混合,尽管可以这样做。您必须单独实例化每个案例,并使用包装器(bind(C)iso_c_binding)将其与Fortran连接。只有当你想要使用非常有限数量的类型时,才有必要使用它。

你也可以尝试使用Fortran中的C预处理器来实现一些穷人的模板。对于较小的库,它可以工作,但对于复杂的事情来说可能变得难以维护或丑陋。作为示例,您可以看到我的链接列表https://github.com/LadaF/fortran-list的实现。

一般来说,没有明确正确的方法或答案,你总是要从更多的可能性中进行选择。

答案 1 :(得分:2)

除了Vladimir F已提到的所有内容之外,现在还有Fortran Template Library(FTL)。大部分FTL是在Fortran中重新实现C ++的STL,其中C预处理器被滥用于模板实例化。您必须手动设置模板,但从最终用户的角度来看应该非常方便。可以找到文档here

该库仍然相当新,虽然它附带了大量的单元测试,但它还没有在野外使用过多。您还需要一个非常新的Fortran编译器来使用它。

免责声明:我是这个图书馆的作者。