Wie löse ich das am Besten?



  • Hallo,
    ich habe eine Frage und zwar, wie kann ich am Elegantesten den Zugriff auf einen std::vector gewähren?

    class Blub
    {
    std::vector<int> Blaaaaa;
    };
    
    class Foo
    {
    Blub bar;
    void BlubBlub()
    {
      bar.... // Wie komme ich an den std::vector?
    }
    };
    

    Gibts da eine Musterlösung? Würde es gerne möglichst sauber lösen. Danke!

    Gruß



  • Kommt darauf an was du mit dem Vector machen willst. Auf den ersten Blick logisch erscheint eine Getter-Methode.

    MfG SideWinder



  • Komm drauf an inwieweit der Zugriff auf den Vektor gehen soll. Brauchst du nur eine Funktionalität, brauchst du Zugriff auf konstanten Methoden vom vector oder brauchst du vollen Zugriff?

    In erstem Fall würde ich wahrscheinlich einfach eine Methode in Blub anbieten die den Zugriff erledigt. In zweiten Fall könntest du eine Konstante Referenz auf den vector zurückgeben lassen, in letzten Fall wären zwei Methoden (const ref und ref) auf den Vektor möglich oder die Freundschaft zwischen beiden Klassen.



  • Hi,

    class Blub {
    
       private:
                std::vector<int> Blaaaaa;
       public:
                const Vector<int>& getVec() const
                {
                    return Blaaaaa;
                }    
    };
    

    BTW: Gewöhn dir ne sauber Formatierung der Klasse an. Gibt besseren Übersicht 😉



  • Hi,
    ja an eine getter Methode hatte ich auch schon gedacht. Ich muss eigentlich nur den Vector durchlaufen

    for ( blabla::interator It = MEIN_VECTOR.begin(); It != MEIN_VECTOR.end(); ++It )
    {
    // Und mit (*It) arbeiten
    }

    Sollte ich dafür tatsächlich die Oben vorgeschlagene get Methode benutzen? Danke!!!



  • Heißt "Und mit (*It) arbeiten" auch *it verändern oder nur lesen ?



  • //...
    if ( strcmp( Blabla.top().Name, (*It).Proc()->getName() ) == 0 )
    {
    	(*It).Proc()->ProcessMessage( Blabla.top() );
    }
    //...
    


  • Helppppp schrieb:

    //...
    if ( strcmp( Blabla.top().Name, (*It).Proc()->getName() ) == 0 )
    {
    	(*It).Proc()->ProcessMessage( Blabla.top() );
    }
    //...
    

    Hmm, wenn getName() und Proc() const ist sollte das funktionieren, wobei aber das nicht logisch Konstant wäre.

    Und eine nicht konstante Referenz auf die interna deiner Klasse zu geben, wäre auch nicht sauber.

    Könntest du nicht sowas machen:

    bar.process(Blabla.top());
    

    Dann in process durch den Vektor iterieren und ggf. damit was anstellen ...


Anmelden zum Antworten