Objekt greift auf anderes Objekt der gleichen Klasse zu, wie?



  • Wenn man n Objekte einer Klasse hat und jedes Objekt soll auf alle anderen n-1 Objekte mit einer Member-Funktion zugreifen, um Daten der anderen Objekte zu erfahren und bei sich selbst abzuspeichern. Wie geht man da vor? Ein Objekt weiß per static Klassen-Variable, dass es n Objekte gibt. Beispiel?



  • Die Objekte können sich bei ihrer Erzeugung irgendwo registrieren. Mal ein Minimalstbeispiel:

    class A;
    set<A*> registry;
    class A {
    public:
      A() { registry.insert(this); }
      ~A() { registry.erase(this); }
    };
    


  • thx, damit hat man nun sämtliche Zeiger auf alle Objekte. Warum set und nicht vector?
    Wenn man in einer Methode memberfunction(blabla) alle anderen Objekte abfragen will mit der Methode getValue(return val_) ausser dem eigenen Objekt. Gibt es da eine elegante Lösung? Man könnte die Zeiger im set mit this vergleichen, wenn gleich ist es das Objekt dasselbst. Geht das so?



  • xyz_ schrieb:

    Warum set und nicht vector?

    mit set geht das Entfernen besser. machs wie du denkst, ich wollte nur das Prinzip zeigen.

    Man könnte die Zeiger im set mit this vergleichen, wenn gleich ist es das Objekt dasselbst. Geht das so?

    Klar, warum nicht?

    Man könnte vielleicht was mit einer ringförmigen Struktur bauen, wo jedes Objekt einen Zeiger dort hinein in der Art hat, dass es sich selbst beim Traversieren als letztes findet. Wenn man Lust hat.



  • danke. gibt es so eine ringförmige Struktur (sozusagen token ring) in STL?



  • Nö.



  • wie kann man bei set auf eine bestimmte Position zugreifen? bei vector einfach v[i].



  • In set gibt es keine Positionen.



  • Beispiel:

    set<datentyp*> Set_von_Zeigern; 
    set<datentyp*>::iterator pos;
    
    //...
    
    for( pos = Set_von_Zeigern.begin(); pos != Set_von_Zeigern.end(); ++pos )
    {
      //Aktionen
    }
    


  • in einem Set guckt man nur, ob es vorhanden ist

    set<A*> registry; 
    
    ...
    
    A foo;
    if (registry.count(&foo))
      ...; // es ist vorhanden
    

    gibt es so eine ringförmige Struktur (sozusagen token ring) in STL?

    Ich kenne toke Ring nur von Netzwerken. Eine Struktur, die Tokens rumreicht? Was macht dieses Token? Kann man immer das Element auslesen, bei dem das Token grade ist?


Anmelden zum Antworten