有没有办法定义通用程序来动态处理kind
,int
和character
的每个real
,而无需为每个{1}}指定程序?我想这也是在询问Fortran中是否存在kind
多态性。
我正在考虑接口这样的东西:
module generics_test
interface read_generic
module procedure read_int, &
read_real, &
read_char
end interface read_generic
contains
subroutine read_int(value)
implicit none
! Arguments
<what sort of type spec could go here?> :: value
! Implementation
<would there need to be some kind handling here?>
end subroutine read_int
<other read subroutines here>
end module generics_test
似乎Fortran 2003中的多态性侧重于派生类型,例如波特兰集团的examples。我只对内在类型的泛型处理感兴趣。
这主要是出于好奇,因为我们几乎只使用integer
和character
以及real(8)
的默认值。 (N.B.我知道我们应该使用iso_fortran_env
,但并非我们使用的所有编译器都支持它。)
答案 0 :(得分:1)
不,这是不可能的。甚至没有参数化派生类型。
您必须手动创建每个特定的过程。有许多预处理器技巧可以帮助你做一些穷人的C ++ - 比如诱人。甚至可以在StackOverflow上找到示例。其中包括STL analogue in Fortran。