Тут такое дело, нада построить каталогизатор CD дисков: юзер копирует диск в базу, а прога сохраняет заголовки файлов к себе. Можно хранить базу в файле, какимнить хитрым способом - вот я в какой уже не помню теме видел набросок:
| Код | #include <list> #define TAG_NODE char(1) #define TAG_LIST char(2) #define TAG_END char(0)
class CNode { public: list<CNode*> m_Children; virtual void SaveInternalData(fstream &file) = 0; virtual void LoadInternalData(fstream &file) = 0; void SaveToFile(fstream &file) { SaveInternalData(file); for(int i=0; i<m_Children.size(); i++) { file<<TAG_NODE; m_Children[i]->SaveToFile(file); } file<<TAG_END; } void LoadFromFile(fstream &file) { LoadInternalData(file); char tag; file>>tag; if(tag == TAG_LIST) { sequence_delete(m_Children); m_Children.empty(); file>>tag; white(tag !=TAG_END) { CNode *NewNode = new CNode; NewNode->LoadFromFile(file); m_Children.insert(NewNode); { } } };
class CCat: public CNode { public: string m_strName; void SaveInternalData(fstream &file) {file<<m_strName;} void LoadInternalData(fstream &file) {file>>m_strName;} CCat(string name) {m_strName = name;} CNode *AddNode(string name) { CCat *NewNode = new CCat(name); m_Children.insert(NewNode); return NewNode; } }; void main() { CCat cats(""); CCat *marusja = cats.AddNode("Маруся"); CCat *pushok = marusja->AddNode("Пушок"); CCat *murka = pushok->AddNode("Мурка"); murka->AddNode("Тишка"); marusja->AddNode("Маркиз"); CCat *musja = cats.AddNode("Муся"); musja->AddNode("Матрёна"); // ... открыли файл "fstream fileS" для записи cats.SaveToFile(fileS); // ... открыли файл "fstream fileL" для чтения cats.LoadFromFile(fileL); }
|
Ещё я краем уха слышал, про boost::serialize(), и доверчиво считаю что он сериализует всё подряд, как в С#. Может Вы придумаете третий вариант...
P.S. За меня прогу пистаь не надо, вы только идею подкиньте как лучше сделать |