Ok, das ist wirklich schwer zu bekennen, aber ich habe im Moment eine starke Versuchung, von ihm zu erben std::vector
.
Ich benötige ungefähr 10 angepasste Algorithmen für den Vektor und möchte, dass sie direkt Mitglieder des Vektors sind. Aber natürlich möchte ich auch den Rest der std::vector
Benutzeroberfläche haben. Nun, meine erste Idee als gesetzestreuer Bürger war es, ein std::vector
Mitglied in der MyVector
Klasse zu haben. Aber dann müsste ich die gesamte Schnittstelle des std :: vector manuell bereitstellen. Zu viel zum Tippen. Als nächstes dachte ich über private Vererbung nach, damit ich, anstatt Methoden erneut bereitzustellen, eine Reihe von using std::vector::member
's in den öffentlichen Bereich schreiben würde . Das ist eigentlich auch langweilig.
Und hier bin ich, ich denke wirklich, dass ich einfach öffentlich erben kann std::vector
, aber in der Dokumentation eine Warnung geben, dass diese Klasse nicht polymorph verwendet werden sollte. Ich denke, die meisten Entwickler sind kompetent genug, um zu verstehen, dass dies sowieso nicht polymorph verwendet werden sollte.
Ist meine Entscheidung absolut nicht zu rechtfertigen? Wenn ja warum? Können Sie eine Alternative bereitstellen, bei der die zusätzlichen Mitglieder tatsächlich Mitglieder sind, bei der jedoch nicht die gesamte Schnittstelle des Vektors erneut eingegeben werden muss? Ich bezweifle es, aber wenn du kannst, werde ich einfach glücklich sein.
Abgesehen von der Tatsache, dass ein Idiot so etwas schreiben kann
std::vector<int>* p = new MyVector
Gibt es eine andere realistische Gefahr bei der Verwendung von MyVector? Wenn ich realistisch sage, verwerfe ich Dinge wie die Vorstellung einer Funktion, die einen Zeiger auf den Vektor nimmt ...
Nun, ich habe meinen Fall dargelegt. Ich habe gesündigt. Jetzt liegt es an dir, mir zu vergeben oder nicht :)
std::vector
's Oberfläche ist ziemlich groß, und wenn C ++ 1x kommt, wird es stark erweitert. Das ist viel zu tippen und mehr in ein paar Jahren zu erweitern. Ich denke, dies ist ein guter Grund, Vererbung statt Eindämmung in Betracht zu ziehen - wenn man der Prämisse folgt, dass diese Funktionen Mitglieder sein sollten (was ich bezweifle). Die Regel, nicht von STL-Containern abzuleiten, lautet, dass sie nicht polymorph sind. Wenn Sie sie nicht auf diese Weise verwenden, gilt dies nicht.