boost::function
-
Hallo,
ich hätte gerne gewusst wo man, außer im aktiven Multithreading, Funktionszeiger braucht?Danke im Voraus!
-
Event-Systeme?!
außerdem vereinfachen sie die arbeit auch in normalen dingen
z.bsp. war erst heut wieder ne frage zu for_each und fkt-zeigern (klar würde es auch ohne gehen, aber mit gehts eben in einer Zeile - und meist trotzdem übersichtlicher als mit ner schleife)bb
-
Recht nützlich wenn man per DLL-Injection oä. im Speicher eines fremden Prozesses ist und Funktionen aufrufen möchte.
-
unskilled schrieb:
Event-Systeme?!
Wohl eines der wichtigsten Anwendungsgebiete. In vielen GUI-Frameworks wird das Observer-Pattern über Funktionszeiger realisiert. Aber auch im Zusammenhang mit funktionalen STL-Algorithmen finden Funktionszeiger (oder Funktoren) Anwendung. Generell, um Callback-Mechanismen zu implementieren.
boost::functionkann allerdings viel mehr als schlichte Funktionszeiger - besonders in Verbindung mitboost::bindentsteht daraus ein sehr mächtiges Konstrukt.
-
Für so ziemlich alle numerischen Verfahren, zum Beispiel. Nimm etwa eine Newton-Approximation - es wäre ziemlich albern, sie für jede Funktion neu zu schreiben.
-
Noch viel wichtiger für ISO-C++ ist, dass der Virtual Method Table Pointer auf Funktionen in der VMT zeigt.
-
Ad aCTa schrieb:
Noch viel wichtiger für ISO-C++ ist, dass der Virtual Method Table Pointer auf Funktionen in der VMT zeigt.
hä?
was hat der vtable damit zu tun??
und was hat ISO-C++ mit dem vtable zu tun???
-
> der vtable
Die VTable, die!
> damit zu tun
Diese Tabelle ist i.d.R. beim Compiler als Array aus Funktionszeigern implementiert, also auf die virtuellen Funktionen.
Der VMT-Ptr. ist in dieser Hinsicht sogar ein Zeiger auf ein Funktionszeiger, dem ersten in der VTable.
Und das ist bekanntlich auf Compiler-Ebene, also für die Sprachfunktionalität entscheident und hebt die Notwendigkeit von Funktionszeigern hervor.
Man könnte noch weiter gehen, OOP basiert auch zum Großteil aus Funktionszeigern in seiner C++-Implementierung.
-
Der Compiler kann das machen, wie er will. Der Standard schreibt nicht vor, wie es geschieht, sondern nur die allgemeine Schnitstelle.
-
Es läuft allerdings anyway auf Funktionszeiger hinauf, da die Prozedur-Adressen im RAM nun einmal in Datensegmenten alias Funktionszeiger untergebracht sind. Die Technik erlaubt gar nichts anderes. Mir ist kein Compiler bekannt, der es anders machen würde.
-
Ad aCTa schrieb:
> der vtable
Die VTable, die!
lol
ja, wenn du meinst.n.b.: man kann das geschlecht eines fremdwortes nicht vom geschlecht der übersetzung herleiten.
-
hustbaer schrieb:
n.b.: man kann das geschlecht eines fremdwortes nicht vom geschlecht der übersetzung herleiten.
http://www.spiegel.de/kultur/zwiebelfisch/0,1518,348938,00.html
-
volkard schrieb:
hustbaer schrieb:
n.b.: man kann das geschlecht eines fremdwortes nicht vom geschlecht der übersetzung herleiten.
http://www.spiegel.de/kultur/zwiebelfisch/0,1518,348938,00.html
Was willst du damit sagen?
Dass "Table" ein Gebäudename ist, und der Herr der das schreibt die deutsche Sprache definiert?
Blödsinn.