目前在我的代码我有一个二维数组阵列派生类型:选定条目
integer, allocatable :: elements(:,:)
,并定义一些常量
integer, parameter :: TYP = 1
integer, parameter :: WIDTH = 2
integer, parameter :: HEIGHT = 3
! ...
integer, parameter :: NUM_ENTRIES = 10
和分配类似
allocate(elements(NUM_ENTRIES,10000))
所以我可以访问像
write(*,*) elements(WIDTH,100) ! gives the width of the 100th element
现在我想不仅有整数,而且还有每个元素的混合类型。 所以我定义了一个派生类型
type Element
logical active
integer type
real width
! etc
end type
和使用元素
type(Element), allocatable :: elements(:)
阵列与2D阵列版本我可以调用一个子程序,告诉它使用哪个条目。 例如
subroutine find_average(entry, avg)
integer, intent(in) :: entry
real, intent(out) :: avg
integer i,
real s
s = 0
do i = lbound(elements,1), ubound(elements,1)
if (elements(TYP,i) .gt. 0) s = s + elements(entry,i)
end do
avg = s/(ubound(elements,1)-lbound(elements,1))
end subroutine
所以,我可以call find_average(HEIGHT)
找到的平均身高或通过WIDTH
得到平均宽度。 (和我的子程序比找到平均高度或宽度做更高级的事情,这只是一个例子。)
问题:我如何使用不同的类型(与派生类型一样),但也重用我的函数来工作与不同的条目(如在示例子例程中)?
'entry'总是指向一个相同类型的条目(总是说'real'),所以幸运的是我不会有这个问题。但前两句话对我来说并不清楚。对于数组的情况下,你的意思是我可以给片'元素(WIDTH,:)'到函数?对于派生类型的情况,我不想要一个元素,我需要所有的元素。你可以追加我的示例函数的修改版本,所以我明白你的意思?谢谢 – 2012-03-23 23:17:33
关于编辑:没有抱歉,这不是我想要的。 – 2012-03-24 14:01:08
它传递用户定义类型的给定子项目的所有元素。如有必要,Fortran可以根据子项目的类型选择不同的过程。这与你想要做的有什么不同? – 2012-03-24 21:22:21