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
查找它,而不必设置它。