インタフェース宣言を使って,そのインタフェース宣言中のすべての手続を引用する総称名を宣言することができます。
このようなインタフェース宣言の最初の行は次の形式を取ります。
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」を参照してください。