Fortran:在通用过程中处理不同类型的类型

时间:2015-03-30 10:50:09

标签: generics fortran

有没有办法定义通用程序来动态处理kindintcharacter的每个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。我只对内在类型的泛型处理感兴趣。

这主要是出于好奇,因为我们几乎只使用integercharacter以及real(8)的默认值。 (N.B.我知道我们应该使用iso_fortran_env,但并非我们使用的所有编译器都支持它。)

1 个答案:

答案 0 :(得分:1)

不,这是不可能的。甚至没有参数化派生类型。

您必须手动创建每个特定的过程。有许多预处理器技巧可以帮助你做一些穷人的C ++ - 比如诱人。甚至可以在StackOverflow上找到示例。其中包括STL analogue in Fortran