funktion als parameter uebergeben
-
Hier ist das was du suchst. Funktionszeiger sind C, das ist C++.
-
Hallo
Nein boost ist eine externe Bibliothek und gehört nicht zum aktuellen C++ Standard. Also sind Funktionspointer das einzige Mittel dafür sowohl in C als auch in C++
bis bald
akari
-
Blabla. Funktionszeiger sind nunmal C. Sie funktionieren z.B. nicht mit Funktionsobjekten und Methoden, obwohl diese jawohl auch Funktionen sind. Ergo müsste man sich selbst was schreiben, da das aber bei solch elementaren Kram nicht angebracht ist (außer zur Übung) nimmt man eine fertige Implementierung. Eine andere Möglichkeit dafür wäre Loki, aber Boost ist mehr im Stil der Standardbibliothek.
-
.filmor schrieb:
Sie funktionieren z.B. nicht mit Funktionsobjekten und Methoden
BTW: Statische Methoden funktionieren.
-
.filmor schrieb:
Blabla. Funktionszeiger sind nunmal C. Sie funktionieren z.B. nicht mit Funktionsobjekten und Methoden, obwohl diese jawohl auch Funktionen sind. Ergo müsste man sich selbst was schreiben, da das aber bei solch elementaren Kram nicht angebracht ist (außer zur Übung) nimmt man eine fertige Implementierung. Eine andere Möglichkeit dafür wäre Loki, aber Boost ist mehr im Stil der Standardbibliothek.
Solltest vielleicht mal http://www.newty.de/fpt/index.html lesen.
Kurt
-
.filmor schrieb:
Blabla. Funktionszeiger sind nunmal C. Sie funktionieren z.B. nicht mit Funktionsobjekten und Methoden, obwohl diese jawohl auch Funktionen sind. Ergo müsste man sich selbst was schreiben, da das aber bei solch elementaren Kram nicht angebracht ist (außer zur Übung) nimmt man eine fertige Implementierung. Eine andere Möglichkeit dafür wäre Loki, aber Boost ist mehr im Stil der Standardbibliothek.
Stimmt.
Und obwohl Boost NOCH nicht zu den std gehoert, setzte ich es ein.
Boost ist gut. Filesystem oder threads oder sonst was sind
OS unabhaengig, und somit spart man sich zeit.Thx
-
So einfach kann es gehen:
http://www.boost.org/doc/html/function/tutorial.htmlwas ist daran kein sauberer style @akari?
-
Michael E. schrieb:
.filmor schrieb:
Sie funktionieren z.B. nicht mit Funktionsobjekten und Methoden
BTW: Statische Methoden funktionieren.
Definition der Wikipedia: "eine definierte Aktion eines Objekts". Statische Klassenfunktionen sind danach keine Methoden.
ZuK schrieb:
Solltest vielleicht mal http://www.newty.de/fpt/index.html
Hab ich, und weiter?
-
xGhost schrieb:
So einfach kann es gehen:
http://www.boost.org/doc/html/function/tutorial.htmlwas ist daran kein sauberer style @akari?
Habe ich behauptet, das es kein sauberer Stil wäre? Ich habe nur gesagt, das Boost eine externe Lib ist und nicht im C++ Standard. Und das ist wohl nicht strittig.
bis bald
akari
-
.filmor schrieb:
Michael E. schrieb:
.filmor schrieb:
Sie funktionieren z.B. nicht mit Funktionsobjekten und Methoden
BTW: Statische Methoden funktionieren.
Definition der Wikipedia: "eine definierte Aktion eines Objekts". Statische Klassenfunktionen sind danach keine Methoden.
Das ist lediglich ne Frage der Namensgebung. Für mich zum Beispiel sind es Methoden, weil man in C# nur noch von Methoden spricht und es auch dort statische Funktionen gibt.
-
.filmor schrieb:
Funktionszeiger sind nunmal C. Sie funktionieren z.B. nicht mit Funktionsobjekten und Methoden, obwohl diese jawohl auch Funktionen sind.
Funktionsobjekte haben ihren eigenen Typ und können imho noch leichter übergeben werden als "echte" Funktionen. Und für Methoden hat C++ die Funktionszeiger-Syntax etwas erweitert (auf Methodenzeiger ala "typedef int (T::*t_met)(int) - aber das sieht grausam aus).
In C++ nimmt man dann häufig Templates, um alles mögliche zu verarbeiten:
template<typename func> double ableit(double x0,func f) { //berechne f'(x0) //das lässt sich compilieren, solange f(y) für einen double-Wert y gültig ist }
-
akari schrieb:
Nein boost ist eine externe Bibliothek und gehört nicht zum aktuellen C++ Standard. Also sind Funktionspointer das einzige Mittel dafür sowohl in C als auch in C++
Der erste Satz ist natürlich richtig. Der zweite aber vollkommener Quatsch. boost ist doch in Standard-C++ implementiert. Also gibt es in Standard-C++ doch mehr Möglichkeiten.
-
CStoll schrieb:
.filmor schrieb:
Funktionszeiger sind nunmal C. Sie funktionieren z.B. nicht mit Funktionsobjekten und Methoden, obwohl diese jawohl auch Funktionen sind.
Funktionsobjekte haben ihren eigenen Typ und können imho noch leichter übergeben werden als "echte" Funktionen. Und für Methoden hat C++ die Funktionszeiger-Syntax etwas erweitert (auf Methodenzeiger ala "typedef int (T::*t_met)(int) - aber das sieht grausam aus).
In C++ nimmt man dann häufig Templates, um alles mögliche zu verarbeiten:
template<typename func> double ableit(double x0,func f) { //berechne f'(x0) //das lässt sich compilieren, solange f(y) für einen double-Wert y gültig ist }Aber der Threadsteller sprach doch davon, dass er die Funktionen in einem Vektor speichern wolle. Da Funktionsobjekte, Methodenzeiger und Funktionszeiger jeweils unterschiedlich groß sind (nämlich 1. beliebig, 2. 2*sizeof (void*) und 3. sizeof (void*) iirc), funktioniert das so nicht, man muss den Aufruf also kapseln, wofür man wiederum boost::function oder die Loki-Variante nimmt, wobei ersteres aber allgemein portabler sein sollte.