|
class TSimple
{
...
public:
void find_object(..., void(*ptr_func)(void *prt)); //-- ptr_func указатель на метод класса.
}
void TSimple::find_object(..., void(*ptr_func)(void *prt))
{
void *pObject; //Указатель на найденный объект, можно не void* а TSimple *
........................
pObject = ......
.........
prt_func(pObject);
}
class TFolder: public TSimple;
{
public:
static void load(void *_this);
}
void TFolder::load(void *_this)
{
TFolder *pFolder = (TFolder *)this;
................................
//Далше все операции с дпнными Folder выполняем через pFolder
}
class TObject: public TSimple;
{
public:
void save(void *_this);
void load(void *_this);
}
void TObject::save(void *_this)
{
TObject *pObject = (TObject *)_this;
....................................
}
void TObject::load(void *_this)
{
TObject *pObject = (TObject *)_this;
....................................
}
TFolder Folder, root;
TObject Object1, Object2;
...main...
{
...
// root содержит в себе Folder.
// Folder содержит в себе Object1 и Object2
...
Folder.find_object(TOBJECT,..., TObject::save); //-- Найти в папке Folder вложенные объекты типа TObject и при нахождении вызвать TObject::save, т.е. нашел Object1 должен произойти вызов Object1.save
Folder.find_object(TOBJECT,..., TObject::load); //-- Найти в папке Folder вложенные объекты типа TObject и при нахождении вызвать TObject::load, т.е. нашел Object1 должен произойти вызов Object1.load
root.find_object(TFOLDER,..., TFolder::load); //-- Найти в папке root вложенные объекты типа TFolder и при нахождении вызвать TFolder::load.
}