Iterator auf Klassenvarible zurückgeben



  • Moinsen,

    Ich habe eine Klasse "K1", die hat als Klassenvariable einen Stanardkontainer von Objekten "T".

    class K1
    {
    private:
        vector<T> t;
    
    public:
        vector<T>::const_iterator getTIterBegin();
        vector<T>::const_iterator getTIterEnd();
    }
    
    vector<T>::const_iterator T1::getTIterBegin( )
    {
        return t.begin();
    }
    
    vector<T>::const_iterator Frame::getTIterEnd( )
    {
        return t.end();
    }
    

    Eine zweite Klasse "K2" soll über alle Elemente dieser Klasse iterieren, jedoch ohne Kenntniss über den Container, den K1 verwendet um die Ts zu speichern. Im Moment läuft es auf diese Weise:

    K2::someFnkt()
    {
        // k1 ist Klassenvariable von k2
        for (vector<T>::const_iterator i=k1->getTIterBegin(); i!=k1->getTIterEnd(); ++i)
        {
        	// nur-lese Operation auf *i
        }
    }
    

    Das Problem hierbei ist, dass ich in dieser Schleife eben ohne das Wissen, dass sich in K1 ein vector<T> verbirgt nichts machen kann. Ich möchte aber eine Lösung die Unabhängig vom spezifischen Container in K1 ist.

    Kurzum, mein Problem ist, dass ich über eine Freme Klassenvariable iterieren möchte, von der ich nur weis, dass sie ein Container ist und welche Klasse die Speichert. Ich möchte diesen Container aber nicht gleich public machen.

    Hat jemand eine Idee für die Lösung und etwas Muße mir diese zu erläutern?

    Schönen Abend noch

    Beechen



  • class K1
    {
    private:
        vector<T> t;
    
    public:
        vector<T>::const_iterator getTIterBegin();
        vector<T>::const_iterator getTIterEnd();
        typedef vector<T>::const_iterator iter;           //<-----
    }
    
    vector<T>::const_iterator T1::getTIterBegin( )
    {
        return t.begin();
    }
    
    vector<T>::const_iterator Frame::getTIterEnd( )
    {
        return t.end();
    }
    
    K2::someFnkt()
    {
        // k1 ist Klassenvariable von k2
        for (K1::iter i= k1->getTIterBegin(); i!=k1->getTIterEnd(); ++i) //<---
        {
            // nur-lese Operation auf *i
        }
    }
    

    so oder so ähnlich


Log in to reply