1

次のコードがあります。

    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 へのアクセスは「ゲッター」ルーチンを介するよりもはるかに高速であることを読みました。

助言がありますか。

ありがとう

4

1 に答える 1