2012-12-05 11 views
12

In Fortran 90, è possibile sovraccaricare le funzioni con un'interfaccia. Tuttavia, in base a this site, non possiamo definire queste funzioni con lo stesso nome di argomenti. Con gfortran, non sembra essere un problema in quanto il codice seguente funziona abbastanza bene:Funzioni di sovraccarico con 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 

Quindi, è cattiva pratica di farlo?

Modifica: Chiamare la funzione con parole chiave non cambia nulla.

risposta

13

Il tuo esempio è perfettamente valido. Possono essere distinti dal TIPO degli argomenti. I nomi non sono importanti allora. Nel tuo caso, il tipo dell'argomento cur differisce.

Gli argomenti con lo stesso nome possono essere distinti in base al tipo, al tipo o al grado (compatibilità TKR).

Il punto dell'articolo di riferimento è che non è possibile distinguere due procedure specifiche solo dall'ORDINE degli argomenti. È perché le procedure possono essere richiamate con gli argomenti della parola chiave in qualsiasi ordine. Questo può essere superato utilizzando nomi diversi per gli argomenti.

In caso contrario, dichiarare procedure più specifiche per uno generico con gli stessi nomi di argomenti, ma con tipi/tipi/ranghi diversi è molto comune e perfettamente valido.

Fortran 2003/2008 aggiunge ulteriori possibilità di risoluzione generica. È anche possibile distinguere le procedure dall'attributo pointer/allocatable dei loro argomenti e dagli argomenti dummy del puntatore della procedura.

+0

Non l'ho visto così. Grazie :) –

Problemi correlati