Fortran级联多态性

时间:2014-12-17 13:27:11

标签: fortran polymorphism

我有两个例程,一个叫另一个根据类型选择 matc_a来电takano。当我从takano致电matc_a时,我是否需要 所以请将takano内的Select Type包裹起来,或者我可以打电话给。{ 如下

Case ("takano")
  Call takano (a)

有两个例程

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

1 个答案:

答案 0 :(得分:2)

是的,您可以使用较短的版本并避免第一种类型选择。

您是否在takano内使用了一个并不重要。重要的是它接受多态伪参数。

顺便说一句,在我看来,你在Fortran中模仿动态类型语言。我不确定,这是否明智。