View Single Post
Old 22-06-2010, 17:16   #9
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Ad esempio:
Codice:
class CycleMap
{
    map<string, BaseCycle *> cycleMap;
public: 
    CycleMap()
    {
         map.push_back("MainCycle", new MainCycle());
         map.push_back("Cycle1", new Cycle1());
         map.push_back("Cycle2", new Cycle2());
         map.push_back("Cycle3", new Cycle3());         
    }
};

class BaseCycle
{
   BaseCycle(){};
   virtual BaseCycle * run() = 0;
   virtual bool continue() { return true; };
};


class MainCycle: public BaseCycle
{
public:
   MainCycle(){};
   virtual BaseCycle * MainCycle::run()
   {
      do
      {
          state = state.run();
      }
      while(state.continue())
   }
   virtual bool continue() { return false; };
};
  
class Cycle1: public BaseCycle
{
public:
   Cycle1() {};
   virtual BaseCycle * run()
   {
      BaseCycle * next;
      do
      {
          someThing();
          if(condition)
              next = cycleMap["Cycle2"].run();
      }
      while(next == this);
      return next;
   }
};

class Cycle2: public BaseCycle
{
public:
   Cycle2() {};
   virtual BaseCycle * run()
   {
      BaseCycle * next;
      do
      {
          someThingOther();
          if(condition)
              next = cycleMap["Cycle3"].run();
          else if(other condition)
              next = cycleMap["Cycle4"].run();
          else
              next = cycleMap["MainCycle"].run();
      }
      while(next == this);
      return next;
   }
};
Tra l'altro è carino perché potresti scambiare dinamicamente l'ordine di esecuzione dei cicli...

Ultima modifica di cionci : 22-06-2010 alle 17:35.
cionci è offline   Rispondi citando il messaggio o parte di esso