関連情報
ナビゲーション:Fortran 2003入門   前へ   上へ   次へ

2.6 オブジェクト結合手続き

オブジェクト結合手続きは手続きポインタ成分であり型束縛手続と似た動作をします。 ただし結合が型毎ではなくオブジェクト毎に行われる点が異なります。 手続きポインタ成分宣言の構文は次の通りです:

PROCEDURE( [proc-interface] ) , proc-component-attr-spec-list :: proc-decl-list

ここで
  • それぞれのproc-component-attr-specNOPASS, PASS, PASS(arg-name), POINTER, PRIVATE, PUBLICのうちのいずれかで、
  • それぞれのproc-decl は成分名にnullへのデフォルト初期化 (‘=> NULL()’、省略可)を続けたものです。
POINTER 属性は必須です。

オブジェクト結合手続きは型束縛手続と同様に渡されたオブジェクトの仮引数を持ちます。 もしこれを望まないのであれば 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


Results matter. Trust NAG.
Privacy Policy | Trademarks