在Fortran中实现一组队列的简单方法?

时间:2012-10-16 00:58:48

标签: templates fortran structure

假设我需要在一个过程中实现至少5个队列,每个队列来自不同的定义类型。如何以简单而简短的方式实现这一目标?

另一种看待问题的方法是找到我的方式:经过很多时间在fortran中定义我自己的结构后,我不得不用C ++编写一个程序,然后我看到模板的使用是多么容易......现在,我的母语也是如此......

似乎知识并不总是很舒适

非常感谢!

3 个答案:

答案 0 :(得分:1)

您是否考虑过无限多态指针?例如,参见“现代Fortran Explained”中的第269页ff。

答案 1 :(得分:1)

我在Ruby中实现了fortran模板,它集成在我的CodeMate中。模板语法类似于C ++。我已经实现了双链表。模板定义片段如下:

...

template:list_t <type elem_t>
type list_t
    integer :: num_elem = 0
    type(elem_t), pointer :: head, tail
contains
    ...
    procedure :: insert => list_insert
    ...
end type list

...

template:list_insert@list_t <type elem_t>
subroutine list_insert(this, elem, ...)

    class(list_t), intent(inout) :: this
    type(elem_t), intent(out), pointer :: elem

    ...

end subroutine list_insert

模板实例如下:

type(list_t<foo_t>) foo_list

其中foo_t是扩展list_elem_t<foo_t>的用户定义类型。您可以通过

将元素插入foo_list
call foo_list%insert(elem, ...)

我认为我对Fortran模板的解决方案很自然。

答案 2 :(得分:0)

如果你真的想要模板,那就有Pyf95++。它使用预处理器为Fortran带来模板和STL。 (下载here

可以在FLIBS中找到使用transfer()的通用链接列表。

(否则使用前沿编译器,您可以使用Richard Lozes建议的无限多态。)