Fortran派生类型,带有可选组件

时间:2018-04-25 23:03:28

标签: fortran fortran90 derived-types

在派生类型中包含可选组件是否正确。例如,下面的代码段中的变量“fname_new”。如果没有,那是什么方式?我想根据源是1还是2类来包含'fname_new'。

TYPE, PUBLIC :: species
  CHARACTER(LEN=12) :: spname
  CHARACTER(LEN=12) :: source
  CHARACTER(LEN=20) :: fname
  CHARACTER(LEN=12) :: field
  CHARACTER(LEN=20),OPTIONAL :: fname_new
END TYPE species

1 个答案:

答案 0 :(得分:2)

必须在编译时知道组件的数量,因此您不能拥有可选组件。但是,您可以拥有可分配的组件。在你的情况下:

type :: species
  ...
  character(len=:), allocatable :: fname_new
end type

另一种方法是构造某种类层次结构。这将有利于在类型而不是字符串中编码信息。

编辑:正如@VladimirF所指出的,这种方法需要fortran-2003。

实际上,如果fname_new组件实际上只有20个字符长,那么你就不会通过使它成为可分配来节省大量空间。在x86 / 64位体系结构上,allocatable将是一个8字节的指针,并将强制在您的类型上进行某种对齐,这会占用更多的字节。我可以将其留作character(len=20)