Die Definition der Funktionen kann dann erst folgen wenn die Klassen A
und B auch definiert wurden. Eine Möglichkeit direkt die typedefs in
deiner Klasse zu benutzen fällt mir jetzt nicht ein.
Mit einem template, da der code strukturell identisch ist, bzw. nur vom
DT abhängig ist. Ausserdem erfolgt die Instanziierung eines Templates
"lazy", also erst da, wo sie gebraucht wird.
Moin,
Ehrlich.nach das so nicht. Schon bei den kleinen Schnipsel Code ist es
schon nicht mehr intuitiv durchzusehen was da passieren soll. Lass den
mal ein wenig größer werden und ein halbes Jahr vergehen. Dann sieht
keiner mehr durch. Sich du nicht.
Wilhelm M. schrieb:> Warum ist der "normale" Weg für Dich nicht anwendbar? [...]
So würde das set doch nur die shared_ptr vergleichen, aber nicht die
Werte. Aber für das Problem würde ich mir dann ein ptr_less Functor
bauen der Pointer vergleicht indem er sie dereferenziert und die Werte
vergleicht.
Danke sehr für die zahlreiche Beteiligung!
Wilhelm M. schrieb:> Warum ist der "normale" Weg für Dich nicht anwendbar?
Funktioniert leider so nicht (auch dein 2ter Vorschlag). Ich schätze,
weil für std::shared_ptr<T> bereits alle Vergleichsoperatoren definiert
sind:
http://de.cppreference.com/w/cpp/memory/shared_ptr/operator_cmpWilhelm M. schrieb:> Mit einem template, da der code strukturell identisch ist, bzw. nur vom> DT abhängig ist.
Ist er leider nicht. Ich habe absichtlich A::value und B::num genannt,
denn im eigentlichen Code heissen die auch nicht gleich. Ich kann diese
Variable nicht umbenennen (bzw. ich will nicht, weil dadurch der Sinn
nicht mehr ersichtlich wäre).
Sebastian V. schrieb:> Die Definition der Funktionen kann dann erst folgen wenn die Klassen A> und B auch definiert wurden. Eine Möglichkeit direkt die typedefs in> deiner Klasse zu benutzen fällt mir jetzt nicht ein.
Ok, trotzdem Danke.
nicht“Gast“ schrieb:> Moin,>> Ehrlich.nach das so nicht. Schon bei den kleinen Schnipsel Code ist es> schon nicht mehr intuitiv durchzusehen was da passieren soll. Lass den> mal ein wenig größer werden und ein halbes Jahr vergehen. Dann sieht> keiner mehr durch. Sich du nicht.
Auf was beziehst du dich?
Du kannst auch für std::set den Comparator-Typ-Parameter weglassen fällt
mir grad auf. Denn die vollständige Spezialisierung hat ja gegenüber dem
allgemeiner Template Vorrang:
Ja, geht auch, wenn Du auch möchtest, dass die DT A bzw. B generell
anordnenbar sein sollen. Aber das wird wohl so sein.
Das "normale" Vorgehen, ist allerdings std::less zu spezialisieren - in
dem Sinne, dass man das gewissermaßen erwartet ... Das kannst Du ja aber
auch mit Deinem Ansatz kombinieren.