2014-09-08 6 views
8

In meinem Design habe ich eine Klasse, die meist eine Front für eine std::vector<OtherClass> ist. Sollte ich in meiner Klassenschnittstelle einem Anrufer eine std::iterator übergeben, einen Verweis auf die ganze vector übergeben oder eine Reihe von Funktionen zur Verfügung stellen, um auf den Inhalt meiner vector zuzugreifen? Oder anders vorgehen?Meine Klasse ist meistens eine Front für einen Container, sollte ich diese Tatsache enthüllen?

Weitere Informationen: Die Elemente im Container werden während der Initialisierung eingerichtet und nicht hinzugefügt, wenn das Programm normal ausgeführt wird. Die Clients meiner Klasse werden oft Abfragen durchführen und den Zustand der OtherClass Elemente ändern, allerdings nicht in einer zeitkritischen Art und Weise.

+0

Verwenden Sie freie Funktionen, die anstelle von Mitgliedern einer Wrapperklasse 'std :: vector' akzeptieren. – erenon

+3

Dies ist sehr anwendungsspezifisch. Iteratoren funktionieren möglicherweise, aber was ist, wenn Sie ständig zum Vektor hinzufügen? Iteratoren würden ungültig gemacht, wenn der Vektor neu zuordnet. Bitte geben Sie uns weitere Informationen! – Conduit

+0

Wenn 'OtherClass' konstant ist, warum nicht spezialisieren? – Nelfeal

Antwort

1

Sie sollten die Funktionen zum internen Ändern des Vektors erstellen. Hier ist warum:

Je nach Compiler, können Sie verschiedene Versionen von STL (Standard Template Library) ausführen, die unerwartete Probleme verursachen können, hypothetisch könnten sie die Arbeitsweise von std :: vector ändern, wenn Sie es in einem erstellen ältere (oder neuere) Version der Bibliothek und senden Sie es ab.

Ich vermute jedoch, das ist keine Bibliothek, oder ein Projekt, das möglicherweise mit einem anderen Compiler verwendet wird. Sie können sicher einen Verweis oder Zeiger auf den Vektor senden, solange Sie ausführen und mit der gleichen Version von STL kompilieren.