Ja próbuje przejść procedurę ogólną jako rzeczywisty argument do funkcji:Podjęcie procedury rodzajowe do funkcji jako argumentu rzeczywistego
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 zauważa, że nie mogę tego zrobić:
test.f90:43:16:
write(*,*)func3(func,2.,3.)
1
Error: GENERIC procedure ‘func’ is not allowed as an actual argument at (1)
Podobnie z 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)
czytam pośrednictwem standardowej sekcji dotyczącej genu 2008 interfejsy ric i nie mogę znaleźć takiego ograniczenia. Nie mogę też wymyślić przyczyny, dla której kompilator nie byłby w stanie rozwiązać ogólnego interfejsu podczas kompilacji. Moje jelit mówi mi, że powinno to być wykonalne, ale może nie mam właściwego podejścia. Czy znasz standardową metodę, aby to zrobić?
zawsze jasne i do tego stopnia, dzięki. – milancurcic
Będę komentować, że użycie określonych funkcji stanie się niestandardowe w Fortran 2015. W tym momencie nie będzie sposobu przekazania funkcji wewnętrznej jako argumentu procedury i będzie musiał użyć metody opakowania, aby zachować zgodność ze standardami. (Zwracam również uwagę, że od Fortran 95 nie dodano żadnych nowych nazw konkretnych dla właściwości wewnętrznych). –