私は非常に簡単で基本的な実装を好みます。 Serialize()
関数はすでにAccount
クラスに実装されているとします。
Customer
クラスのSerialize()
機能の実装とすることができる:
void Customer::Serialize(Archive& stream)
{
if(stream.isStoring()) //write to file
{
stream << customerName;
stream << customerLastName;
stream << customerIdentityNumber;
stream << customerAccounts.size(); //Serialize the count of objects
//Iterate through all objects and serialize those
std::vector<std::unique_ptr<Account>>::iterator iterAccounts, endAccounts;
endAccounts = customerAccounts.end() ;
for(iterAccounts = customerAccounts.begin() ; iterAccounts!= endAccounts; ++iterAccounts)
{
(*iterAccounts)->Serialzie(stream);
}
}
else //Reading from file
{
stream >> customerName;
stream >> customerLastName;
stream >> customerIdentityNumber;
int nNumberOfAccounts = 0;
stream >> nNumberOfAccounts;
customerAccounts.empty(); //Empty the list
for(int i=0; i<nNumberOfAccounts; i++)
{
Account* pAccount = new Account();
pAccount->Serialize(stream);
//Add to vector
customerAccounts.push_back(pAccount);
}
}
}
コードは自明です。しかし、アイデアは数を記録し、すべての要素をアーカイブすることです。これは、ファイルから逆シリアル化する際に役立ちます。
出典
2017-09-15 22:20:20
MKR
「アカウント」とは何を試しましたか? – Rama
すべての型に 'operator >>'と 'operator <<'が定義されていることを確認してから、ファイルに書き出すかboost :: serializationのようなライブラリを使用します。 – NathanOliver