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 :-)