[C++] STL Container Basisklassen

Design Patterns, Erklärungen zu Algorithmen, Optimierung, Softwarearchitektur
Forumsregeln
Wenn das Problem mit einer Programmiersprache direkt zusammenhängt, bitte HIER posten.
Antworten
Benutzeravatar
dowhilefor
Moderator
Beiträge: 173
Registriert: 27.02.2009, 15:44
Alter Benutzername: 6SidedDice
Echter Name: Nico Probst
Wohnort: Bochum
Kontaktdaten:

[C++] STL Container Basisklassen

Beitrag 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
Mein Gehirn besteht nur noch aus einem hash-index, ich weiss was ich kenn aber kenn nicht was ich weiss
Helmut
Establishment
Beiträge: 237
Registriert: 11.07.2002, 15:49
Wohnort: Bonn
Kontaktdaten:

Re: [C++] STL Container Basisklassen

Beitrag 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
Benutzeravatar
Aramis
Moderator
Beiträge: 1458
Registriert: 25.02.2009, 19:50
Echter Name: Alexander Gessler
Wohnort: 2016
Kontaktdaten:

Re: [C++] STL Container Basisklassen

Beitrag 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.
Antworten