Zugriff auf STL-Queue durch zwei Klassen?



  • Hallo,

    hab eine Frage bezüglich STL. Wie kann ich ich auf STL zugreifen über zwei Klassen. Die eine Klasse befüllt den Queue, die andere nimmt Elemente heraus.

    STL:

    class Warteschlange
    {
       private:
           queue<Diener*> Pool;
    
       public:
           void insert(Diener* di)
           {
               Pool.push(di);
           }
           Diener bedien()
           {
               return Pool.front();
           }
    };
    

    die zwei Klassen:

    //Producer
    class Consumer : public Diener
    {
       public:
           Consumer(char*, int);
           virtual void start();
    };
    
    //Consumer
    class Producer : public Diener
    {
       public:
           Producer(char*, int);
           virtual void start();   
    };
    

    In der Funktion start() des Producers soll die Warteschlange gefüllt werden und in der Funktion start() bei Consumer entleert werden.
    Kann mir da jemand helfen, weis nicht wie ich die Warteschlange in die einzelnen Klassen bekomme?

    Danke
    cash21



  • Du könntest die Methoden in der Warteschlange statisch machen oder besser im Konstruktor von Consumer/Producer einen Zeiger auf eine Warteschlange übergeben. So können die Producer als auch die Consumer auf die selbe Schlange zugreifen.



  • Hab ich mir auch schon überlegt. Aber wir übergebe ich das in den einzelnen Klassen dem Konstruktor und wie mach ich es dann dort?



  • Am Beispiel des Verbrauchers:

    class Consumer : public Diener { 
    private:
       Warteschlange* warteschlange;   
    
    public: 
           Consumer(Warteschlange* schlange, char*, int) {
              warteschlange = schlange   
           } 
           virtual void start(); 
    }; 
    
    int main() {
       Warteschlange schlange;
       Consumer c(&schlange, "foo", 0);
       Producer p(&schlange, "bar", 0);
    
       // c & p greifen jetzt beide auf schlange zu
       // Threads starten usw.
    }
    


  • Ok, danke hat mir schon mal geholfen.


Anmelden zum Antworten