0

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

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

似乎知识并不总是让人舒服

非常感谢!

4

3 回答 3

1

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

于 2012-10-16T03:27:58.470 回答
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

wherefoo_t是扩展的用户定义类型list_elem_t<foo_t>foo_list您可以通过以下方式插入元素

call foo_list%insert(elem, ...)

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

于 2013-01-24T08:00:09.460 回答
0

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

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

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

于 2012-10-16T08:20:33.103 回答