【问题标题】:Fortran Cascading PolymorphismFortran 级联多态性
【发布时间】:2014-12-17 13:27:10
【问题描述】:

我有两个例程,一个调用另一个根据类型选择的例程。
matc_a 调用takano。当我从matc_a 拨打takano 时,我需要 所以把对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

【问题讨论】:

    标签: fortran polymorphism


    【解决方案1】:

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

    你是否在takano 中使用一个都没有关系。重要的是它接受多态虚拟参数。

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

    【讨论】:

    • 没错。它们将在以后变得有用。所以在matc_a中使用Call takano (a)也会在我调用matc_a时设置a对应的输出类型?
    • 在调用matc_a 时必须已经知道输出a 的实际类型。您不能以任何方式将其设置在内部,因为它不可分配或指针。可以只用select type来查找,不能设置。
    猜你喜欢
    • 2015-02-21
    • 2019-04-24
    • 2015-09-22
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多