総称演算子の定義

インタフェース宣言を使って,総称演算子を定義することができます。このようなインタフェース宣言中で指定できる手続は,ユーザー定義演算として引用できる関数に限られます。

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

INTERFACE OPERATOR (op)

op
以下のいずれか。

インタフェース宣言中の関数は,ININTENT を持つ 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) 

関連情報