ナビゲーション:前へ 上へ 次へ
ナビゲーション:前へ 上へ 次へ
2.6 オブジェクト結合手続き
オブジェクト結合手続きは手続きポインタ成分であり型結合手続きと似た動作をします。 ただし結合が型毎ではなくオブジェクト毎に行われる点が異なります。 手続きポインタ成分宣言の構文は次の通りです:PROCEDURE( [proc-interface] ) , proc-component-attr-spec-list :: proc-decl-list
ここで- それぞれのproc-component-attr-spec はNOPASS, PASS, PASS(arg-name), POINTER, PRIVATE, PUBLICのうちのいずれかで、
- それぞれのproc-decl は成分名にnullへのデフォルト初期化 (‘=> NULL()’、省略可)を続けたものです。
オブジェクト結合手続きは型結合手続きと同様に渡されたオブジェクトの仮引数を持ちます。 もしこれを望まないのであれば NOPASS 属性の指定が必要となります (この指定は引用仕様が黙示的である場合(proc-interface が指定されていない場合や型指定の場合)には必須です)。
次は引数無しのサブルーチン並びを使用した例を示したものです。
TYPE action_list
PROCEDURE(),NOPASS,POINTER :: action => NULL()
TYPE(action_list),POINTER :: next
END TYPE
TYPE(t),TARGET :: top
TYPE(t),POINTER :: p
EXTERNAL sub1,sub2
top%action = sub1
ALLOCATE(top%next)
top%next%action = sub2
...
p => top
DO WHILE (ASSOCIATED(p))
IF (ASSOCIATED(p%action)) CALL p%action
p => p%next
END DO
ナビゲーション:前へ 上へ 次へ
