Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Community-Fossil
@CodingCat
Danke. Ich werde mir das ganze mal in ruhe genauer anschauen.
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
class Interface { virtual void someCommonOperation() = 0; }; struct MyCollection { typedef std::list<Interface*> list_type; list_type list; void add(Interface *o) { list.push_back(o); } void remove(Interface *o) { list.remove(o); } void someCommonOperation() { for(list_type::iterator it = list.begin(); it != list.end(); ++it) (*it)->someCommonOperation(); } }; |
@drakon
... Mhh... Ich finde das Argument unbefriedigend, wenn ich jetzt stur wäre, würde ich immer noch darauf beharren das dass
Erstere besser aussieht und besser wartbar ist, außerdem ist der kurze Blick in die Logfile welcher das selbe Ergebnis wie der Blick auf
die Compiler Ausgaben bringt, auch wenn das vielleicht wirklich ein paar Sekunden länger dauert, hinnehmbar.
C-/C++-Quelltext
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 size_t allocateTypeID() { // In multi-threaded Umgebungen müsste hier synchronisiert werden static size_t nextTypeID = 0; return nextTypeID++; } template <class T> inline size_t getTypeID() { // Vor C++11 müsste hier atomar auf Initialisierung geprüft werden static const size_t typeID = allocateTypeID(); return typeID; } };
Werbeanzeige