Seite 1 von 1

[C++] STL Container Basisklassen

Verfasst: 22.05.2009, 14:10
von dowhilefor
Hallo zusammen,

es gibt eine Diskussion über die STL bei uns in der Firma, hauptsächlich geht es darum, warum die STL Container bzw. die Iteratoren kein einheitliches Interface haben.
Wenn man also bspw. einen vector durch eine list austauschen möchte, ohne etwas an den Interfaces seiner Klasse ändern zu müssen. Warum gibt es keine Basisklasse für alle Container, obwohl doch alle begin() und end() bspw. haben und die Iteratoren ähnlich wie auch in C# und Java sich gleich verhalten. In der Diskussion war ich eher der befürworter der STL sehe mich aber diesen Argumenten ausgesetzt und kann nichts passendes darauf zurückgeben. Ich sehe keinen Grund warum die STL es so macht, wie sie es macht. Was für Vorteile bekommt man auf diese Art und warum überwiegen sie einem sauberen Interface Ansatz?
Wäre nett wenn sich jemand von euch dazu äussern könnte, und etwas licht ins Dunkel bringt.

Danke schonmal
Nico

Re: [C++] STL Container Basisklassen

Verfasst: 22.05.2009, 14:36
von Helmut
Eigentlich gibts dafür nur einen Grund: Performance. Würde man eine Basisklasse anbieten, so müsste fast jede Methode virtual sein, selbst ein simples it++ würde einen virtualcall verschlingen, was für den Compiler meist unmöglich ist, wegzuoptimieren. Allerdings ist das für mich kein Grund, die Stl nicht zu benutzen (eher das Gegenteil wäre einer:))
Man kann ja trotzdem Funktionen erstellen, die jeden beliebigen Container annehmen, nur müssen sie eben selbst templates sein.

Ciao

Re: [C++] STL Container Basisklassen

Verfasst: 22.05.2009, 14:41
von Aramis
Der kommende C++-Standard C++0x sieht ein neues Sprachmittel, sog. 'concept's vor, das dieses Manko gewissermaßen behebt. Damit ist es möglich beim Schreiben von Templates bestimmte Interface-Anforderungen an die Templateargumente stellen (z.b. ein definierter operator++). Im Prinzip Basisklassen auf Meta-Ebene, vollständig zur Kompilationszeit ausgewertet.