Ein Funktionsobjekt ist ein Exemplar (Instanz) einer Klasse, die den Funktionsaufrufoperator () überlädt.
Das Überladen eines Operators kennen wir. Bauen wir also erst einmal ein Klassentemplate mit Namen showIt mit einer Elementfunktion doit(), welche die Ausgabe durchführt - also das, was wir eigentlich wollen.
template <typename T>
|
Jetzt, wo wir wissen, wie unsere tu-es-Funktion (doit) aussieht, wandeln wir sie einfach in den überladenen Aufrufoperator () um. Dazu ersetzen wir doit durch operator().
template <typename T>
|
Wir setzen dieses Ding einfach im Aufruf von for_each() ein.
template <typename T>
|
Was tut eigentlich for_each() bei diesem Aufruf?
for_each() geht alle Iteratorwerte von v.begin() bis unmittelbar vor v.end() durch
und ruft nach und nach die Operatorfunktion () von showIt auf. Bei jedem dieser Aufrufe wird der "Wert"
des dereferenzierten Iterators als Parameter übergeben. Es werden so also nach und nach alle Elemente des Vektors
an die Operatorfunktion () von showIt übergeben, welche die Werte ausgibt.
Check it out!
Die Ausgabe des Programms sieht wie die eines Webcounters aus, es ist aber der Inhalt des Verktors V1
in der main-Funktion am Anfang dieser kleinen Reihe.
Haben Sie noch Fragen?
Auf Fragen gehe ich im Unterricht ein. Diesem Zweck dient mein Unterricht unter Anderem. cu ;-)
Es folgt der ganze Quelltext.