Fortran级联多态性

Fortran级联多态性,fortran,polymorphism,Fortran,Polymorphism,我有两个例程,一个调用另一个,根据类型进行选择。 matc_a调用takano。当我从matc_a呼叫takano时,我需要 因此,在选择Type中包装对takano的调用,或者我可以直接调用is吗 如下 Case ("takano") Call takano (a) 有两个程序 Subroutine takano & ( & a & ) Class (*), Intent (out) ::

我有两个例程,一个调用另一个,根据类型进行选择。
matc_a
调用
takano
。当我从
matc_a
呼叫
takano
时,我需要 因此,在
选择Type
中包装对
takano
的调用,或者我可以直接调用is吗 如下

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

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

无论您是否在高野内部使用一个。重要的是它接受多态伪参数


顺便说一句,在我看来,您正在用Fortran模拟一种动态类型语言。我不确定这是否明智。

没错。它们将在以后变得有用。因此,在调用
matc_a
时,在
matc_a
中使用
Call takano(a)
也将设置与
a
对应的输出类型。调用
matc_a
时,必须已经知道输出的实际类型
a
。您不能以任何方式在内部设置它,因为它不可分配或指针。您只需使用
select type
查找它,而不必设置它。