000
28.11.2006, 23:49 Uhr
~ganzVerzweifelt
Gast
|
Hallo Gemeinde, habe folgendes Problem: Eine Klasse B hat einen set<A*> mit Zeiger auf Objete von der Klasse A. Nun will ich aber eine spezielle Anordnung von A-Objekten im Set implementieren. Eigentlich kann man das so machen:
Code: |
Class A {}
Class B { struct Com { bool operator()(const A* i, const A* j) const { return ... // do compare } }
std::set<A*,Com>; }
|
So weit würde das funktionieren. Aber das Problem ist, dass ist in der Funktion operator() auf die Klasse B selbst zugreifen muss, d.h. z.B.
Code: |
Class B { struct Com { bool operator()(const A* i, const A* j) const { return getSomeProperty(i) < getSomeProperty(j); } }
int getSomeProperty(const A* i) const { return ..//some property of i }
std::set<A*,Com>; }
|
und das geht natürlich nicht, da getSomeProperty nicht statisch ist und in Com nicht sichtbar. Aus Designgründen kann ich die Referenz auf B in A nicht speichern (so dass ich auf B-Objekt über A zugreifen kann. Kann man das irgendwie lösen? Kann man bei der Deklaration von set anstatt von Com eine boolesche Funktion von B irgendwie übergeben? Dann könnte sie nähmlich auf die lokale Datenstrukturen zugreifen. Irgendwie sowas:
Code: |
Class B { bool compare(const A* i, const A* j) const { return getSomeProperty(i) < getSomeProperty(j); }
int getSomeProperty(const A* i) const { return ..//some property of i }
std::set<A*,[b]compare[/b]>; }
|
Aber das geht ja so nicht... Hat jemand eine Lösund? |