Мне удалось сохранить свои данные на диск с помощью ускоренной сериализации. Однако я не смог восстановить данные. Не могли бы вы показать мне, что я сделал не так?
Спасибо,
Ниже приведены мои коды
void nDB::save_macros(string filename) {
std::ofstream ofs(filename.c_str(), std::ios::out | std::ios::binary);
//assert(ofs.good());
boost::archive::binary_oarchive oa(ofs);
oa << this;
}
void nDB::load_macros(string filename) {
std::ifstream ifs(filename.c_str());
//assert(ifs.good());
boost::archive::binary_iarchive ia(ifs);
nDB *db = new nDB;
ia >> db;
*this = *db;
}
Ниже приведен пример реализации сериализации
template<class Archive>
void nDB::serialize(Archive &ar, const unsigned int version) {
boost::unordered_map<string,macro*,myhash,cmp_str>::iterator M_IT;
boost::unordered_map<string,layer*,myhash,cmp_str>::iterator L_IT;
for (L_IT = _LAYERS.begin();L_IT != _LAYERS.end();L_IT++) {
string tmpstr = L_IT->first;
//ar & L_IT->first;
ar & tmpstr;
ar & *(L_IT->second);
}
for (M_IT = _MACROS.begin();M_IT != _MACROS.end();M_IT++) {
string tmpstr = M_IT->first;
//ar & M_IT->first;
ar & tmpstr;
ar & *(M_IT->second);
}
}
Ниже приведен мой прогон сохранения результатов прогона:
Вставить макрос mac1 в базу данных OK!
Вставьте макрос mac2 в базу данных OK!
Вставьте макрос mac3 в базу данных OK!
Вставьте порт P1 ОК!
Вставьте порт P2 ОК!
Вставьте порт P2 ОК!
Вставьте порт P3 ОК!
Вставьте порт P1 ОК!
Вставьте порт P3 ОК!
Слой mac3 найден
Macro Mac3 имеет эти порты:
Порт P3 найден
Порт P1 найден
Порт P3 макроса Mac3 использует CLOCK и dir INOUT
Порт P1 макроса mac3 использует POWER и dir OUTPUT
Ниже приведен мой результат загрузки
ОШИБКА :: Не удалось найти макрос mac3 в базе данных