string ID für eine Klasse
-
Hallo zusammen,
ich will in einer Klasse dafuer sorgen, dass ein bestimmtes Element vom typ string nur einmal über alle Objekte dieser Klasse hin existiert, so eine Art eindeutige ID halt. Wie ich das mit einer von mir aufsteigend vergebenen Zahl per static int mache ist mir klar. Nur das Problem ist, dass diese ID zur Laufzeit vergeben wird, und ich müsste rein theoretisch alle bereits vorhandenen Objekte durchsuchen ob so ein Element schonmal existiert. Hoffe ich hab mich so ausgedrueckt, dass ihr mich versteht.
Hab auch schon gesucht nur so richtig weiss ich nicht wonach ich suchen soll. Denke ich brauch nur ein Schluesselwort

Gruss
-
Wenn du eine Member-Variable static machst, ist sie deshalb ja nicht const. Du kannst sie ja später immer noch verändern, was für alle Objekte diese Klasse dann wieder gültig ist.
// xy.h class XY { static CString str; } // xy.cpp CString xy::str = "";
-
hm, dann hab ich ja fuer alle die gleiche, ich will aber ja fuer jedes Objekt eine eigene haben, eine eindeutige so aehnlich wie das unique in sql...
bissl bloed ausgedrueckt in meiner Frage, faellt mir jetzt auch auf... also es soll nicht eins fuer alle sein, sondern in allen soll eins sein, wass nur sich immer unterscheidet, also nur einmal vorkommt... sprich ne ID halt, ueber die ich das Objekt identifizieren kann
-
mein hinweis auf das static int war auf sowas gemuenzt hier:
class xy{ int meineID; static int nextID; } int xy::nextID = 100;und dann im Konstruktor:
{ ... meineID = nextID; nextID++; }
-
du willst diese IDs also nicht einfach fortlaufend vergeben, sondern einen beliebigen String als ID verwenden. um zu checken, ob dieses String schon mal benutzt wurde, musst du alle wissen und durchsuchen. du könntest dir doch alle merken:
class xy { static std::vector<CString> alleIDs; }beim vergeben dann einfach nachschauen, ob es den gewählten String bereits gibt, wenn nicht -> hinzufügen
-
ja in die richtung war ich auch grade unterwegs, denke das klappt so, danke dir
-
Mach Dir doch ne GUID, z.B. mit so etwas wie http://www.codeproject.com/KB/COM/GUID_wrapper_class.aspx
Da brauchst Du eigentlich das doppelte Vorhandensein nicht prüfen, da die Eindeutigkeit garantiert ist.
Und wenn Du das trotzdem überprüfen willst, dann nimm statt std::vector besser eine std::map, da ist das Suchverhalten besser.