2017-07-02 37 views
0

正如我們所知道的那樣,函數名稱可以作爲參數傳入/傳出其他子例程。我想知道是否有任何技巧將函數列表保存到數組中,這些數組將被傳入和傳出進程。如何將一組函數存儲到Fortran陣列中

!-------舉個例子。 在地方,我們設置任何陣列

type(Idonotknow)::Farray(N) 

然後設置值:

Farray(1)%any=>fun1 

Farray(2)%any=>fun2 

... 
Farray(N)%any=>funN 

其中FUN1,FUN2 ... funN是像

Function fun1(input) 
     implicit none 
     statements 
End Function 

最後,我們可以給他們打電話

do i = 1, N 
    Call F(i)%any(input) 
enddo 
+0

你能否澄清一點(例如) –

+0

這是函數指針的概念。 – cup

+0

似乎是這樣。我在https://stackoverflow.com/questions/8612466/how-to-alias-a-function-name-in-fortran找到了一些東西。這很有幫助。但我想知道如何聲明一個數組並保存一組函數。 –

回答

1

首先,你應該創建一個只包含一個不會傳遞任何參數的過程指針的類型。然後創建該類型的數組。

例:

program test_func_array 
    implicit none 

    type pp 
    procedure(func) ,pointer ,nopass :: f =>null() 
    end type pp 

    interface 
     function func(x) 
     real :: func 
     real, intent (in) :: x 
     end function func 
    end interface 

    type(pp) :: func_array(4) 

    func_array(1)%f => exp 
    func_array(2)%f => tan 
    func_array(3)%f => cos 
    func_array(4)%f => sin 

    print*,func_array(1)%f(1.) 
    print*,func_array(2)%f(1.) 
    print*,func_array(3)%f(0.) 
    print*,func_array(4)%f(0.) 

end program test_func_array 
+0

請注意,您需要符合F2003的編譯器。只接受F95語法的人將無法構建它。 – cup

+0

就是這樣。非常感謝。 –