2017-09-15 10 views
0

私は以下のオブジェクトを持っています。他のオブジェクトの配列を含むオブジェクトをシリアル化するC++

class Customer 
{ 
private: 
    std::string customerName; 
    std::string customerLastName; 
    std::string customerIdentityNumber; 
    std::vector<std::unique_ptr<Account>> customerAccounts; 

} 

このオブジェクトをシリアル化する方法はありますか?私は例を見つけようとしましたが、これらはすべて複雑なライブラリを使用しています。確かに簡単な方法が必要でしょうか?

Javaからはこれが新しくなりました。

+0

「アカウント」とは何を試しましたか? – Rama

+1

すべての型に 'operator >>'と 'operator <<'が定義されていることを確認してから、ファイルに書き出すかboost :: serializationのようなライブラリを使用します。 – NathanOliver

答えて

1

私は本当に非常に高速、使いやすく、このようboost::serialization

その偉大なライブラリとしてシリアライズライブラリをお勧めします、そしてちょうどこれよりはるかに多くを持っています!

これはまさにあなたが探しているものです。

0

私は非常に簡単で基本的な実装を好みます。 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); 
     } 
    } 
} 

コードは自明です。しかし、アイデアは数を記録し、すべての要素をアーカイブすることです。これは、ファイルから逆シリアル化する際に役立ちます。

関連する問題