Posted By: Korusef (zmatek nad zmatek) on 'CZprogram'
Title:     Heterogenni seznam
Date:      Wed Jan 30 14:20:28 2002

Ahoj
Mam objekty O1, O2 (mohou mit spolecneho predka), ktere vyuzivam ke zpracovani 
dat, pocitam s tim, ze v budoucnu pribudou dalsi. Tyto objekty potrebuji ke 
sve praci kazdy jina data.
V objektu A, jehoz data zpracovavaji je potrebuji zavolat. Jak to udelata?
Zatim me napadlo:

class O
{
    public:
       virtual void SetData(void *) = 0;
       virtual void * GetData() = 0;
};

class O1: public O
{
.......
};

class O2: public O
{
.......
};

class A
{
    void Akce()
    {
      for( vector<O*>::iterator i = vec.begin(); i < vec.end(); i++){
          (*i)->SetData( GetData( (*i)->identifikator_typu ));
          (*i)->Run();
          SetData( (*i)->identifikator_typu, (*i)->GetData());
      }
    }
    
    virtual void * GetData( const int type_id)
    {
        switch(type_id)of
            case cStr_o1:
              ...
            case cStr_o2:
              ...
        }
    }

    virtual void SetData( const int type_id, void * p)
    {
        switch(type_id)of
            ....
        }
     }
};

Jde to udelat nejak jinak?
Co se mi na tom nelibi je to type_id, predpoklada to, ze si vytvorim nejake 
popisovani typu. Neni neco podobneho uz implementovano?
 


Korusef[ Libor Dener]
                   (-: CauCau :-)

Search the boards