我想构建一个可以在Fortran 90中使用不同实例的哈希表模块(我不确定该怎么命名)。这就是我想要实现的目标:
module hashing
implicit none
private
real, dimension(:), allocatable :: &
real1
public :: &
Hash, hash_init, hash_push, hash_set, hash_get, &
hash_print
type Hash
character (len=128) :: &
data_type
integer :: &
array_size
end type Hash
contains
subroutine hash_init (this)
type(Hash), intent (in) :: &
this
if (trim(this%dtype) == "real1) then
call make_real1(this%array_size)
end if
end subroutine hash_init
subroutine hash_print (this)
type(Hash), intent (in) :: &
this
if (trim(this%dtype) == "real1) then
print *, real1
end if
end subroutine hash_print
end module hashing
因此,在我的测试程序中,两个call hash_print
语句都打印出一个大小为5的数组,因为real1数组是模块散列的一般实例,而不是(我想要实现的)打印第一个实例大小为10,第二个大小为5。
program test
use hashing
implicit none
type(Hash) :: &
inst1, inst2
inst1 = Hash("real1", 10)
inst2 = Hash("real1", 5)
call hash_init(inst1)
call hash_init(inst2)
call hash_print(inst1)
call hash_print(inst2)
end program test
主要思想是添加整数和字符类型维度以及使用和扩展if语句,但我需要知道模块中我需要声明这些可分配维度的位置,以便它们绑定到特定实例只要。如果可能的话!我已经尝试在hash_init
子例程中声明可分配数组,但是它不适用于hash_print
子例程。