Ich habe eine Basisklasse Node, von der ich mehrere Subklassen ableite. In Node halte ich mir einen std::Vector mit allen Kind-Elementen als boost::shared_ptr. Nun muss ich in einer Subklasse eine Sortierung der Kinder durchführen, auf Basis eines spezifischen Kind-Members.
Hierfür wollte ich mir eine Comperator-Funktion schreiben, die als Parameter die boost_shared_ptr der Kinder erhält. Ist das überhaupt möglich? Oder muss ich den Comperator auf Basis der Base Klasse schreiben und vor dem eigentlichen Verlgeich ein dynamic_cast auf die Kindklasse durchführen?
Base Vector sort auf Basis der abgeleiteten Klasse?
Forumsregeln
Wenn das Problem mit einer Programmiersprache direkt zusammenhängt, bitte HIER posten.
Wenn das Problem mit einer Programmiersprache direkt zusammenhängt, bitte HIER posten.
-
- Beiträge: 28
- Registriert: 24.09.2012, 14:49
- Schrompf
- Moderator
- Beiträge: 5161
- Registriert: 25.02.2009, 23:44
- Benutzertext: Lernt nur selten dazu
- Echter Name: Thomas
- Wohnort: Dresden
- Kontaktdaten:
Re: Base Vector sort auf Basis der abgeleiteten Klasse?
Entweder Du definierst eine virtuelle Vergleichsfunktion in der Basisklasse und benutzt die im Comparator, oder Du musst manuell dynamic_cast machen. Der Comparator selbst geht meist als freundlich-direkte Lambda-Funktion, aber wenn der Code dafür zu lang wird, sieht das hässlich aus.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
-
- Beiträge: 28
- Registriert: 24.09.2012, 14:49
Re: Base Vector sort auf Basis der abgeleiteten Klasse?
Ah super danke.
- dot
- Establishment
- Beiträge: 1746
- Registriert: 06.03.2004, 18:10
- Echter Name: Michael Kenzel
- Kontaktdaten:
Re: Base Vector sort auf Basis der abgeleiteten Klasse?
Nur mal so am Rande: Wieso genau shared_ptr!? Die Kinder haben doch wohl nur genau einen Besitzer, nämlich ihren Parent!?
-
- Beiträge: 28
- Registriert: 24.09.2012, 14:49
Re: Base Vector sort auf Basis der abgeleiteten Klasse?
Stimmt, Kinder haben nur einen Parent und selbst wieder 0..n Kinder. Stimme Dir zu Dot, Shared_ptr ist nicht optimal, ist historisch gewachsen.
Wollte ich schon länger mal auf scoped_ptr umstellen, habs aber immer wieder verdrängt. Vielleicht sollte ich Deine Anmerkung mal nutzen, um
etwas aufzuräumen ;)
Wollte ich schon länger mal auf scoped_ptr umstellen, habs aber immer wieder verdrängt. Vielleicht sollte ich Deine Anmerkung mal nutzen, um
etwas aufzuräumen ;)
Re: Base Vector sort auf Basis der abgeleiteten Klasse?
Ich möchte dann an dieser Stelle den unique_ptr einstreuen.
- CodingCat
- Establishment
- Beiträge: 1857
- Registriert: 02.03.2009, 21:25
- Wohnort: Student @ KIT
- Kontaktdaten:
Re: Base Vector sort auf Basis der abgeleiteten Klasse?
Die Frage ist, ob C++11 überhaupt eine Option ist. Wenn ja, dann sind Container von unique_ptr eine gute Wahl. Wenn nein, lassen sich Boosts scoped_ptr gar nicht so einfach in Container packen und man landet entweder bei Boosts ptr_container-Wrappern oder bei Containern von shared_ptr.
Von dynamic_cast nach Möglichkeit (also praktisch immer) absehen. Im Optimalfall ist es mit einer einfachen virtuellen Methode getan, wie Schrompf sie vorschlägt. Ansonsten gilt:

Von dynamic_cast nach Möglichkeit (also praktisch immer) absehen. Im Optimalfall ist es mit einer einfachen virtuellen Methode getan, wie Schrompf sie vorschlägt. Ansonsten gilt:
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite