Dynamic FORTRAN动态分配派生类型
我正在使用FORTRAN中的OOP功能,但我不确定是否可以动态分配派生类型。可能是IVF不支持它,或者标准(2003)禁止这样做 举例来说,我有一个基类DiscPlayer和两个派生类型DVDPlayer和BDPlayerDynamic FORTRAN动态分配派生类型,dynamic,types,polymorphism,fortran,runtime,Dynamic,Types,Polymorphism,Fortran,Runtime,我正在使用FORTRAN中的OOP功能,但我不确定是否可以动态分配派生类型。可能是IVF不支持它,或者标准(2003)禁止这样做 举例来说,我有一个基类DiscPlayer和两个派生类型DVDPlayer和BDPlayer type, abstract :: DiscPlayer private integer, public :: Capacity = 3 endtype DiscPlayer 及 在主程序中,我希望在运行时确定变量类型 program test use Mo
type, abstract :: DiscPlayer
private
integer, public :: Capacity = 3
endtype DiscPlayer
及
在主程序中,我希望在运行时确定变量类型
program test
use ModDiscPlayer
use ModDVDPlayer
use ModBDPlayer
implicit none
class(DiscPlayer), allocatable :: P1
integer :: i
i = 1 ! will add user input
select case(i)
case(1)
allocate(DVDPlayer::P1)
P1%RemoteController = 1
case(2)
allocate(BDPlayer::P1)
endselect
endprogram test
然后我得到了错误的消息:error#6460:这不是包含结构中定义的字段名。有什么解释吗 您只能访问变量的组件和类型绑定过程,这些组件和过程在其声明的类型中被隔离。这里,声明的类型是
DiscPlayer
,因此您只能直接使用容量
如果您知道您拥有或可能拥有某个具体的动态类型,则可以使用selecttype
构造来访问该动态类型的属性
case(1)
allocate(DVDPlayer::P1)
select type(P1)
type is (DVDPlayer)
P1%RemoteController = 1
end select
case(2)
如果与select type
分支中的类型的运行时比较成功,则可以在该分支中按type(DVDPlayer)
的方式使用它
注意:您也可以在
选择类型中使用类is
和类default
。这在逻辑上是有道理的。你能多告诉我一点关于班级的情况吗?我知道类型是。class is和type is有什么区别?class is(t)
如果动态类型是t
或t
的任何扩展类型,则执行节。
case(1)
allocate(DVDPlayer::P1)
select type(P1)
type is (DVDPlayer)
P1%RemoteController = 1
end select
case(2)