我試圖通過一個通用的程序作爲實際參數傳遞給函數:傳遞一個通用的程序,一個函數作爲實際參數
module mymod
implicit none
interface func
module procedure :: func1
module procedure :: func2
endinterface func
contains
real function func1(x)
real,intent(in) :: x
func1 = 2*x
endfunction func1
real function func2(x,y)
real,intent(in) :: x
real,intent(in) :: y
func2 = 2*x + 3*y
endfunction func2
real function func3(func,x,y)
interface
real function func(x,y)
real,intent(in) :: x
real,intent(in) :: y
endfunction func
endinterface
real,intent(in) :: x
real,intent(in) :: y
func3 = func(x,y)
endfunction func3
endmodule mymod
program myprogram
use mymod
implicit none
write(*,*)func3(func,2.,3.)
endprogram myprogram
gfortran 6.2.0注意到,我不能做到這一點:
test.f90:43:16:
write(*,*)func3(func,2.,3.)
1
Error: GENERIC procedure ‘func’ is not allowed as an actual argument at (1)
同樣,ifort 17:
test.f90(39): error #8164: A generic interface name shall not be used as an actual argument. [FUNC]
write(*,*)func3(func,2.,3.)
----------------^
test.f90(39): error #6637: When a dummy argument is a function, the corresponding actual argument must also be a function. [FUNC]
write(*,*)func3(func,2.,3.)
----------------^
compilation aborted for test.f90 (code 1)
我通過對基因的2008標準部分閱讀ric接口,我找不到這樣的限制。我也想不出爲什麼編譯器不能在編譯時解析通用接口的原因。我的直覺告訴我這應該是可行的,但我可能沒有正確的方法。你知道符合標準的方法嗎?
始終清晰,重點突出,謝謝。 – milancurcic
我會評論說,在Fortran 2015中使用特定函數將變爲非標準。在那一點上,將無法將內部函數作爲過程參數傳遞,並且必須使用包裝器方法來保持符合標準。 (我還注意到,自Fortran 95以來,沒有添加新的特定內部函數名稱。) –