šH geocities.com /Vienna/Stage/4793/stl10.htm geocities.com/Vienna/Stage/4793/stl10.htm delayed x ąÕJ ’’’’ ’’’’’’’’’’’’’’’’Č pĖ£ % OK text/html ĻBmo % ’’’’ b.H Mon, 18 Dec 2000 15:43:53 GMT ü Mozilla/4.5 (compatible; HTTrack 3.0x; Windows 98) en, * ąÕJ %
|
Binder, Adapter & NegiererDa man speziell bei einigen Prädikaten einen der Parameter mit einer Konstanten belegen möchte, stellt die Bibliothek sogenannte Binder zur Verfügung, die dies übernehmen. Ähnlich wie im obigen Beispiel die Funktion accumulate den ersten Parameter für plus<int> übergeben bekommen hat, kann man mit bind1st() und bind2nd() das erste Argument bzw. das zweite Argument einer binary_function mitgeben. Vergleiche wie "finde den Wert <7" sehen dann so aus:
// finde das erste Element < 7 Dies funktioniert deswegen, weil die Namen der Argument in den Funktionsobjekten standardisiert sind. Dieser Mechanismus wird auch Currying genannt. Um die Möglichkeit auch Elementfunktionen (member_functions) eines Objektes in einem Algorithmus aufzurufen, statt nur globale Funktionen, gibt es einige Funktionen, die Adapter genannt werden, die dies erlauben: //
zeichne alle gespeicherten Zeiger auf Objekte(unär) Da die Algorithmen nur höchstens binäre Funktionen verwenden, macht es auch nur Sinn, Memberfunktionen mit höchstens einem Parameter zu übergeben. Um noch flexibler zu sein, und auch normale Funktionen einem Binder mitzugeben, gibt es die Funktion ptr_fun, der man ähnlich wie beim Beispiel rotate_all eine binäre Funktion erwartet. Dies nennt man dann Funktionszeigeradapter. Negierer erlauben es, wie es der Name schon sagt, das Prädikat zu negieren. Hierzu gibt es die Funktionen not1() (unär) und not2() (binär), die dies bewerkstelligen: extern
"C" int strcmp(const char*, const char*);
//aus stdlib(binär!) |