総称代入の定義

インタフェース宣言を使って,総称代入を定義することができます。このようなインタフェース宣言中で使用できる手続は,ユーザー定義代入として引用できるサブルーチンに限られます。

このようなインタフェース宣言の最初の行は次の形式を取ります。

INTERFACE ASSIGNMENT (=)

インタフェース宣言中のサブルーチンは,2 つの省略できない引数を持たなくてはなりません。第 1 の引数は OUT または INOUTINTENT を持ち,第 2 の引数は ININTENT を持たなくてはなりません。

ユーザー定義代入は,サブルーチンの引用として扱われます。代入の左辺は,サブルーチンの第 1 仮引数に対応します。代入の右辺は,第 2 引数に対応します。

ASSIGNMENT キーワードは,等号の両辺が同じ構造型である場合,代入演算を拡張または再定義します。

ユーザー定義要素別処理代入は,SUBROUTINE 文中で ELEMENTAL を宣言することによって指定します。

総称代入が関わるすべての手続引用は,1 つの固有手続に対して解決可能でなくてはなりません。つまり,曖昧であってはなりません。詳細については,「総称手続の一義的な引用」を参照してください。

次に,代入を定義する手続インタフェース宣言の例を示します。

	INTERFACE ASSIGNMENT (=)
	  SUBROUTINE BIT_TO_NUMERIC (NUM, BIT)
	    INTEGER, INTENT(OUT) :: NUM
	    LOGICAL, INTENT(IN)  :: BIT(:)
	  END SUBROUTINE BIT_TO_NUMERIC

	  SUBROUTINE CHAR_TO_STRING (STR, CHAR)
	    USE STRING_MODULE			! 型 STRING を定義
	    TYPE(STRING), INTENT(OUT) :: STR	! 可変長文字列
	    CHARACTER(*), INTENT(IN)  :: CHAR
	  END SUBROUTINE  CHAR_TO_STRING
	END  INTERFACE

次の例は,サブルーチン BIT_TO_NUMERIC を引用する 2 つの等価な方法を示しています。

	CALL BIT_TO_NUMERIC(X, (NUM(I:J)))
	X = NUM(I:J)

次の例は,サブルーチン CHAR_TO_STRING を引用する 2 つの等価な方法を示しています。

	CALL CHAR_TO_STRING(CH, '432C')
	CH = '432C'

関連情報