Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Templates 用Fortran实现一组队列的简单方法?_Templates_Fortran_Structure - Fatal编程技术网

Templates 用Fortran实现一组队列的简单方法?

Templates 用Fortran实现一组队列的简单方法?,templates,fortran,structure,Templates,Fortran,Structure,假设我需要在一个过程中实现至少5个队列,每个队列来自不同的定义类型。如何以简单快捷的方式实现这一点 另一种方法来解决问题的方式是:在Fortran中定义了我自己的结构之后,我不得不用C++编写一个程序,然后我看到模板的使用是多么简单。现在,我想用我的母语说同样的话 似乎这些知识并不总是令人满意的 非常感谢 您考虑过无限多态指针吗?例如,请参见“现代Fortran解释”中的第269页ff.如果您确实需要模板,则有。它使用预处理器为Fortran带来了模板和STL。(供下载) 可以在中找到使用tra

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

另一种方法来解决问题的方式是:在Fortran中定义了我自己的结构之后,我不得不用C++编写一个程序,然后我看到模板的使用是多么简单。现在,我想用我的母语说同样的话

似乎这些知识并不总是令人满意的


非常感谢

您考虑过无限多态指针吗?例如,请参见“现代Fortran解释”中的第269页ff.

如果您确实需要模板,则有。它使用预处理器为Fortran带来了模板和STL。(供下载)

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


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

我已经用Ruby实现了fortran模板,它集成在我的编译器中。模板语法类似于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

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

你的问题有点不清楚。您的意思是要创建5个队列,每个队列包含相同类型的“对象”吗?也许你可以发布你的(伪)代码来解释。我的意思是5个不同的队列,5个不同的对象。示意图:o-o-o-o-o-o-o-o-o 0-0-0-@@@@@和x-x-x-x。因此,您必须声明每个队列及其事件5次。我假设一个伪代码可以由5个模块组成,每个模块都有一个非常相似的代码来定义一个队列和相关的过程,并且每个节点中的对象是不同的,这一点差别很小。所以有5个超过100行的模块,唯一的区别是每个模块中的“type(object1)::data”必须更改。。。。所以我要求一个更短的方法。这可能是一个方法,但没有一个处罚相关?我觉得在每个节点上都有不同类型的列表是一个非常自由的列表,因为你不知道接下来会发生什么。我在中看到了这个列表的一个示例,但似乎有许多嵌套对象,这不是一个缺点吗?据我所知,没有性能损失;select type的执行方式与select case基本相同。缺点是会丢失一些类型安全性。请使用user\u模块,queue\u data=>user\u data!如果用户_数据包含内部指针等,请使用下三个!队列\数据\创建=>用户\数据\创建,&!queue_data_Destroy=>user_data_Destroy,&!queue\u data\u Copy=>user\u data\u Copy复制五份,编辑每个“user\u data”就完成了。好主意!!。我看过Pyf95++程序,听起来很有趣,在我看来,这是一个在下一个标准中增强fortran的完美建议。然而,我发现FLIBS的方式非常有用和简单。实际上,我用一些预处理器变量简化了代码。现在一切都好了,我有我的fortran模板!!我很高兴。谢谢!!!如果你想看的话,我把我的代码贴在这页上。
call foo_list%insert(elem, ...)