Infos über neuen C++-Standard? Thread Nr.2
-
Hallo,
hat jetzt eigentlich schon jemand ein Vorschlag für ein foreach ohne typeof gemacht?Wenn nein, hier meiner:
struct ForEachHelper { void* cur_; template <class T, class U> bool assign (T& r, U& c) { typedef typename U::iterator iter; if (*static_cast<iter*>(cur_) != c.end()) { r = **static_cast<iter*>(cur_); ++*static_cast<iter*>(cur_); return true; } delete static_cast<iter*>(cur_); return false; } template <class U> ForEachHelper(U& cont) { typedef typename U::iterator iter; cur_ = (void*)new iter(cont.begin()); } }; #define FOREACH(var, cont) for (ForEachHelper b(cont) ; b.assign(var,cont);)
Anwendung:
vector<int> vec; vec.push_back(6); vec.push_back(5); vec.push_back(4); int n; FOREACH(n, vec) { cout << n << endl; } set<string> s; s.insert("abc"); s.insert("cde"); s.insert("efg"); string str; FOREACH(str, s) { cout << str << endl; }
-
lol, da hätte man eigentlich früher drauf kommen können. Statt den deklarierten Typ zu parametrisieren, einfach bei jeder Anwendung davon einen parametrisierten Cast benutzen
nice
-
cur_ = (void*)new iter(cont.begin());
Warum nimmst Du nen C-Style-Cast hier?
Dass man seinen Iterator auf den Heap legen muss is performance-mäßig auch ein bisschen traurig.Aber ziehmlich cool eigentlich. Werd ich mal verwenden und mich vielleicht sogar dran gewöhnen
-
Warum nimmst Du nen C-Style-Cast hier?
Um etwas Inkonsistenz reinzubringen und damit den Leser wach zu halten
Dass man seinen Iterator auf den Heap legen muss is performance-mäßig auch ein bisschen traurig
Richtig. Das ist ein echter Nachteil. Allerdings lässt sich dieser zur Not auch umgehen. Man muss ja nur new passend überladen.
-
Was wird der nächste Standard beinhalten? Templatetypedefs?
-
*** schrieb:
Was wird der nächste Standard beinhalten? Templatetypedefs?
das wär mal was
//edit wow is der thread schon alt
-
Wie wärs mal mit nem neuen Thread. Auf den ersten kann man leider schon nicht mehr zugreifen
Wie stehts eigentlich im Moment um C++0x? Welche Änderungen gibts? Ach, ich mach jetzt einfach nen neuen auf.
-
was beudetet eigentlich C++0x?
-
0x steht für das Erscheinungsjahr.
-
*** schrieb:
Was wird der nächste Standard beinhalten?
Template-Parameter als friends deklarieren zu können
-
ness schrieb:
*** schrieb:
Was wird der nächste Standard beinhalten?
Template-Parameter als friends deklarieren zu können
auch sowas wie Hummes dirstream?
-
Weiß schon einer wann der neue Standard kommt? Kommt der schon im nächsten Jahr? Welche Compiler werden ihn unterstützen?
-
Wie wäre es denn, wenn du einfach mal den neuen Thread zu diesem Thema liest?
http://www.c-plusplus.net/forum/viewtopic.php?t=97205