手続の総称名の定義

インタフェース宣言を使って,そのインタフェース宣言中のすべての手続を引用する総称名を宣言することができます。

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

INTERFACE generic-name

generic-name
総称名。インタフェース宣言中の任意の手続名と同じ名前でも,任意の参照可能な総称名 (総称組込み名を含む) と同じ名前であってもかまいません。

この種のインタフェース宣言を使うと,総称組込み手続を拡張または再定義することができます。

総称名が与えられる手続は,同じ種類の副プログラムでなくてはなりません。つまり,すべてが関数であるか,すべてがサブルーチンでなくてはなりません。

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

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

	INTERFACE GROUP_SUBS
	  SUBROUTINE INTEGER_SUB (A, B)
	    INTEGER, INTENT(INOUT) :: A, B
	  END SUBROUTINE INTEGER_SUB

	  SUBROUTINE REAL_SUB (A, B)
	    REAL, INTENT(INOUT) :: A, B
	  END SUBROUTINE REAL_SUB

	  SUBROUTINE COMPLEX_SUB (A, B)
	    COMPLEX, INTENT(INOUT) :: A, B
	  END SUBROUTINE COMPLEX_SUB
	END INTERFACE 

3 つのサブルーチンは,個々の個別名によって,またはグループ名 GROUP_SUBS によって引用することができます。

次の例は,INTEGER_SUB の引用を示しています。

	INTEGER V1, V2
	CALL GROUP_SUBS (V1, V2)

以下の例を考えます。

	INTERFACE LINE_EQUATION
	  SUBROUTINE REAL_LINE_EQ(X1,Y1,X2,Y2,M,B)
	    REAL,INTENT(IN) :: X1,Y1,X2,Y2
	    REAL,INTENT(OUT) :: M,B
	  END SUBROUTINE REAL_LINE_EQ

	  SUBROUTINE INT_LINE_EQ(X1,Y1,X2,Y2,M,B)
	    INTEGER,INTENT(IN) :: X1,Y1,X2,Y2
	    INTEGER,INTENT(OUT) :: M,B
	  END SUBROUTINE INT_LINE_EQ
	END INTERFACE

この例では,REAL_LINE_EQ または INT_LINE_EQ のどちらかを使うことができる LINE_EQUATION は総称名です。LINE_EQUATION に渡される引数のプロパティに従って,Fortran は適切なサブルーチンを選択します。総称名が存在する場合でも,固有名で手続を呼び出すことができます。前出の例では,固有名 (REAL_LINE_EQ) で REAL_LINE_EQ を呼び出すこともできますし,総称名 LINE_EQUATION でも呼び出すことができます。

関連情報

インタフェース宣言の詳細については,「INTERFACE」を参照してください。