2012-12-05 41 views
12

Trong Fortran 90, chúng tôi có thể quá tải các chức năng với giao diện. Tuy nhiên, theo this site, chúng tôi không thể xác định các hàm này có cùng tên đối số. Với gfortran, có vẻ như đó không phải là vấn đề vì mã sau hoạt động tốt:Chức năng quá tải với Fortran

interface check 
    module procedure check_int, check_real 
end interface 

contains 

subroutine check_int(cur, dname, func_name, fname) 
    integer, allocatable, intent(in) :: cur(:) 
    character(*) :: dname, func_name, fname 
    ... 
end subroutine 

subroutine check_real(cur, dname, func_name, fname) 
    real, allocatable, intent(in) :: cur(:) 
    character(*) :: dname, func_name, fname 
    ... 
end subroutine 

Vì vậy, có thực tế không?

Chỉnh sửa: Gọi chức năng bằng từ khóa không thay đổi bất cứ điều gì.

Trả lời

13

Ví dụ của bạn hoàn toàn hợp lệ. Chúng có thể được phân biệt bằng LOẠI của các đối số. Các tên không quan trọng sau đó. Trong trường hợp của bạn, loại đối số cur khác nhau.

Các đối số có cùng tên có thể được phân biệt theo loại, loại hoặc xếp hạng của chúng (tương thích TKR).

Điểm của bài viết được tham chiếu là bạn không thể phân biệt hai thủ tục cụ thể chỉ với ORDER của các đối số. Đó là bởi vì các thủ tục có thể được gọi với các đối số từ khóa theo thứ tự bất kỳ. Điều này có thể được overcomed bằng cách sử dụng tên khác nhau cho các đối số.

Nếu không khai báo các quy trình cụ thể hơn cho quy trình chung với cùng tên đối số, nhưng với các loại/loại/bậc khác nhau thì rất phổ biến và hoàn toàn hợp lệ.

Fortran 2003/2008 thêm một số khả năng khác để giải quyết chung. Nó cũng có thể phân biệt các thủ tục bởi thuộc tính pointer/allocatable của các đối số của chúng và bởi các đối số dummy pointer pointer.

+0

Tôi không thấy nó như thế. Cảm ơn :) –

Các vấn đề liên quan