Während einer Diskussion im IFS heute kamen wir auf Features im neuen C++-Standard zu sprechen, vor allem wegen Templates und den neuen Concept Maps (im Prinzip eine Möglichkeit, um Templates zu prüfen, ob sie gewisse Voraussetzungen erfüllen. Soll vor allem endlich anständige Fehlermeldungen in diesem Bereich bringen.). Ich wusste zwar immerhin, dass bald ein neuer Standard erscheint, aber was der genau beinhaltet war mir auch noch nicht klar. Heute Abend beim lesen des entsprechenden Wikipedia Artikels habe ich noch was viel cooleres gefunden: Lambda functions and expressions! Und dazu passend natürlich auch Closures. Auf die Schnelle ist mir nichts besseres eingefallen, deshalb verwende ich einfach das Wikipedia-Beispiel:
vector<int> liste;
int total = 0;
for_each(liste.begin(), liste.end(), <>(int x; &total) (total += x));

Cool, nicht? Ist zwar noch nicht ganz so elegant wie in Ruby, aber doch nicht übel.
[2, 5].inject(0) {|sum, i| sum += i} # => 7

Jetzt könnte man noch eine Wette abschliessen, wann Java nachzieht. Schliesslich kann C# es auch…

Und ja, mit Boost hat man eigentlich bereits Lambda-Ausdrücke, die Nachteile werden im C++0x Proposal auch diskutiert.