Tôi đang cố gắng để vượt qua một thủ tục chung như một đối số thực tế để một hàm:Đi qua một thủ tục chung để một chức năng như là đối số thực tế
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 ghi chú rằng tôi không thể làm điều này:
test.f90:43:16:
write(*,*)func3(func,2.,3.)
1
Error: GENERIC procedure ‘func’ is not allowed as an actual argument at (1)
Tương tự, với 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)
tôi đọc qua 2008 mục chuẩn trên gen giao diện ric và tôi không thể tìm thấy hạn chế như vậy. Tôi cũng không thể nghĩ ra một lý do tại sao trình biên dịch sẽ không thể giải quyết giao diện chung tại thời gian biên dịch. Ruột của tôi nói với tôi rằng điều này có thể thực hiện được, nhưng tôi có thể không có cách tiếp cận đúng. Bạn có biết cách tuân thủ tiêu chuẩn để làm điều này không?
Luôn rõ ràng và đến điểm, cảm ơn. – milancurcic
Tôi sẽ bình luận rằng việc sử dụng các chức năng cụ thể sẽ trở thành không chuẩn trong Fortran 2015. Tại thời điểm đó sẽ không có cách nào để chuyển một hàm nội tại như một đối số thủ tục và sẽ phải sử dụng phương thức trình bao để tuân thủ các tiêu chuẩn. (Tôi cũng lưu ý rằng không có tên cụ thể nào cho nội tại đã được thêm vào kể từ Fortran 95.) –