0

1 つのプロシージャに少なくとも 5 つのキューを実装する必要があるとします。それぞれのキューは定義された型が異なります。シンプルで短い方法でこれを達成するにはどうすればよいですか?.

質問を理解するもう 1 つの方法は、私が思いついた方法です。Fortran で独自の構造を定義するのに多くの時間を費やした後、C++ でプログラムを作成する必要がありました。その後、テンプレートの使用がいかに簡単であるかを確認しました...今、私は母国語で同じことをしたい....

知識は必ずしも快適ではないようです

どうもありがとう!

4

3 に答える 3

1

無制限のポリモーフィック ポインターを検討しましたか? たとえば、「Modern Fortran Explained」の pp 269 ff を参照してください。

于 2012-10-16T03:27:58.470 に答える
1

CodeMateに統合された 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

foo_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 に答える