2
유형에 따라 선택하는 두 개의 루틴을 하나씩 호출합니다.
matc_a
은 takano
입니다. 내가 를 필요, matc_a
에서 takano
호출 할 때Fortran 계단식 다형성
Case ("takano")
Call takano (a)
을 다음과 같이 두 가지 루틴이 있습니다 그래서 Select Type
내 takano
에 대한 호출을 래핑 또는 그냥 호출 할 수 있습니다 입니다
Subroutine takano &
( &
a &
)
Class (*), Intent (out) :: a
Select Type (a)
Type Is (Real (Real32))
a = atan (Real(1,Real32)/Real(49,Real32))
Type Is (Real (Real64))
a = atan (Real(1,Real64)/Real(49,Real64))
Type Is (Real (Real128))
a = atan (Real(1,Real128)/Real(49,Real128))
End Select
End Subroutine takano
Subroutine matc_a &
( &
a, strategy &
)
Class (*), Intent (out) :: a
Character (len=*) :: strategy
Select Case (Trim (strategy))
Case ("takano")
Select Type (a)
Type Is (Real (Real32))
Call takano (a)
Type Is (Real (Real64))
Call takano (a)
Type Is (Real (Real128))
Call takano (a)
End Select
End Select
End Subroutine matc_a
맞아요. 그들은 나중에 유용하게 될 것입니다. 따라서'matc_a'에서'Call takano (a)'를 사용하면'matc_a '를 호출 할 때'a'에 해당하는 출력 유형을 설정하게됩니까? – Zeus
'matc_a'를 호출 할 때 실제로 출력 유형 'a'를 알아야합니다. 할당 가능하거나 포인터가 아니기 때문에 어떤 방법 으로든 내부에 설정할 수 없습니다. 그것을 찾기 위해'select type'을 사용할 수는 있지만 그것을 설정하는 것은 아닙니다. –