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 notlar bunu yapamaz:
Ben gene 2008 Standart bölümü üzerinden okuyorumtest.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)
: ifort 17 ile Benzer
test.f90:43:16:
write(*,*)func3(func,2.,3.)
1
Error: GENERIC procedure ‘func’ is not allowed as an actual argument at (1)
, ric arayüzleri ve böyle bir kısıtlama bulamıyorum. Derleyicinin, derleme zamanında genel arabirimi çözümleyememesinin nedenini de düşünemiyorum. Bağırmam bana bunun yapılabilmesi gerektiğini söylüyor ama doğru yaklaşıma sahip olmayabilirim. Bunu yapmak için standartlara uygun bir yol biliyor musunuz?
daima açık ve öz, sayesinde elde edilir. – milancurcic
Belirli işlevleri kullanmanın Fortran 2015'te standart olmayacağını açıklayacağım. Bu noktada bir prosedür argümanı olarak içsel bir işlevi iletmenin bir yolu olmayacak ve standartlara uymak için sarmalayıcı yöntemini kullanmak zorunda kalacak. (Ayrıca Fortran 95'ten beri intrinsics için yeni isimlerin eklenmediğini de not ediyorum.) –