次のコードがあります。
Module Hello
Implicit None
Type, Public :: TestOne
Private
Integer :: One, Two, Three
contains
Procedure, Pass, Public :: Set => SetSub
End type TestOne
Private :: SetSub
Interface Assignment(=)
Module Procedure SubgetValue
End Interface Assignment(=)
contains
Subroutine SetSub(this)
Implicit none
Class(TestOne), Intent(InOut) :: this
this%one=1
this%two=2
this%three=3
End Subroutine SetSub
Subroutine SubGetValue(ISOut,TSIn)
Implicit None
Integer, Intent(Out) :: ISOut
Class(TestOne), Intent(In) :: TSIn
ISOut=TSIn%one
End Subroutine SubGetValue
End Module Hello
Program Test
use Hello
Implicit None
Type(TestOne) :: TSTest
Integer :: b
call TSTest%Set()
b=TSTest
write(*,*) b
End Program Test
このバージョンでは、「=」経由で「TSTest%One」にしかアクセスできません。問題は、"TSTest%one"、"TSTest%two"、または "TSTest%three" にアクセスできるようにインターフェイスの割り当てを作成する方法です。「One」、「Two」、「Three」が非公開でない場合、それは些細なことです。ただし、目標は、それらをプライベートに保ち、インターフェイスの割り当てを介してアクセスすることです。「Two」または「Three」にアクセスするための追加のモジュール プロシージャには、同じ仮引数があり、コンパイル時エラーが発生します。
ただし、その問題を解決する別の方法は「セッター」/「ゲッター」ルーチンですが、Web のどこかで、代入を介した varialbe へのアクセスは「ゲッター」ルーチンを介するよりもはるかに高速であることを読みました。
助言がありますか。
ありがとう