インタフェース宣言を使って,総称演算子を定義することができます。このようなインタフェース宣言中で指定できる手続は,ユーザー定義演算として引用できる関数に限られます。
このようなインタフェース宣言の最初の行は次の形式を取ります。
INTERFACE OPERATOR (op)
op
以下のいずれか。
ユーザー定義単項演算子 (引数 1 つ)
ユーザー定義 2 項演算子 (引数 2 つ)
拡張組込み演算子 (引数の数は,その演算子の組込みの使用方法との一貫性を持っていなくてはなりません)
インタフェース宣言中の関数は,IN の INTENT を持つ 1 つまたは 2 つの省略できない引数を持たなくてはならず,関数結果は引継ぎ文字長型であってはなりません。ユーザー定義演算は,関数引用として扱われます。
次に,ユーザー定義単項演算とユーザー定義 2 項演算の形式 (および例) を示します。
演算 | 形式 | 例 |
---|---|---|
ユーザー定義単項演算 | .defined-operator. operand1 | .MINUS. C |
ユーザー定義 2 項演算 | operand2 .defined-operator. operand3 | B .MINUS. C |
1 演算対象は,関数の仮引数に対応します。
2 左演算対象は,関数の最初の仮引数に対応します。 3 右演算対象は,第 2 引数に対応します。 |
組込み演算子シンボルの場合,その総称プロパティには,そのシンボルが表す組込み演算が含まれています。個々の関係演算子のどちらの形式も同じ解釈を持つので,1 つの形式 (>= など) を拡張すると,両方の形式 (>= と .GE.) が定義されることになります。
次に,新しい演算子を定義する手続インタフェース宣言の例を示します。
INTERFACE OPERATOR(.BAR.) FUNCTION BAR(A_1) INTEGER, INTENT(IN) :: A_1 INTEGER :: BAR END FUNCTION BAR END INTERFACE
次の例は,新しい演算子を使って,関数 BAR を引用する方法を示しています。
INTEGER B I = 4 + (.BAR. B)
次に,既存の演算子を拡張するユーザー定義演算子を持つ手続インタフェース宣言の例を示します。
INTERFACE OPERATOR(+) FUNCTION LGFUNC (A, B) LOGICAL, INTENT(IN) :: A(:), B(SIZE(A)) LOGICAL :: LGFUNC(SIZE(A)) END FUNCTION LGFUNC END INTERFACE
次の例は,関数 LGFUNC を引用するための 2 つの等価な方法を示しています。
LOGICAL, DIMENSION(1:10) :: C, D, E N = 10 E = LGFUNC(C(1:N), D(1:N)) E = C(1:N) + D(1:N)
関連情報