|
Есть структура, грубо можно представить как корневой каталог, папки, подпапки и объекты. Т.е. каждая папка может содержать объекты разных типов и подпапки. У всех у них общий предок, который имеет метод для поиска объектов нужного типа и при нахождении обекта нужного типа должна вызываться функция, являющаяся методом того же класса, что и искомый объект.
class TSimple
{
...
public:
void find_object(..., ptr_func); //-- ptr_func указатель на метод класса.
}
class TFolder: public TSimple;
{
public:
void load(void);
}
class TObject: public TSimple;
{
public:
void save(void);
void load(void);
}
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.
}