Funktion-Zeiger-arrays in Fortran
Kann ich erstellen-Funktion-Zeiger in Fortran 90 code wie
real, external :: f
und verwenden Sie dann f
als argument an eine andere Funktion/subroutine. Aber was ist, wenn ich möchte, dass ein array von Funktionszeigern? In C würde ich nur tun,
double (*f[])(int);
erstellen Sie ein array von Funktionen zurückgeben double-und integer-argument. Ich habe versucht, die meisten offensichtlich,
real, external, dimension(3) :: f
aber gfortran nicht lassen, mir, mix und EXTERNEN DIMENSION. Gibt es eine Möglichkeit, das zu tun, was ich will? (Der Kontext dies ist ein Programm für die Lösung eines Systems von differentialgleichungen, so konnte ich den Eingang der Gleichungen ohne einen Millionen-Parameter in meinen Subroutinen.)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erklärung "real, external :: f" nicht wirklich "f" in eine volle Zeiger, da können Sie nicht ändern Sie die Prozedur, dass es Punkte -- ist es erlaubt die übergabe dieser Funktion an eine andere routine., So müssen Sie auch die "Zeiger" - Attribut. Es gibt Beispiele auf Seite 267 "Fortran 95/2003 explained" von Metcalf, Reid & Cohen -- eine google-Suche nach "fortran-Prozedur-Zeiger" wird die Seite aufzurufen. Ein einfaches Beispiel, in der Nähe zu verkaufen ist "Reale, externe, pointer :: f_ptr". Alternativ: "- Verfahren (f), pointer :: f_ptr". Dies ist eine Fortran 2003-feature -- http://gcc.gnu.org/wiki/Fortran2003 und http://gcc.gnu.org/wiki/ProcedurePointers Listen partielle Unterstützung in gfortran, am besten mit 4.5. Ich bin mir nicht sicher, ob "dimension" ist, direkt erlaubt, aber Sie können zuweisen einer Prozedur auf einen Zeiger, das bietet viel Flexibilität. Sie können auch den Zeiger in einen abgeleiteten Typ, die in ein array.
Edit: hier ist ein code Beispiel, das funktioniert mit gfortran 4.5:
Edit 2: Zeile auskommentiert pro Kommentare unten.