2017-11-20 12 views
1

ブーストシリアル化を使用して複数のオブジェクトを保存および取得するにはどうすればよいですか? たとえば、私はクラスContactを持っており、連絡先を入力してファイルに保存します。別の時間に別の連絡先を入力し、ファイルに保存する必要があります。ブーストシリアル化を使用して複数のオブジェクトを保存および取得する

私は関数は、このようにする必要があり、保存と思う:

void save_contact(const Contact &s, const char * filename){ 
    std::ofstream ofs(filename, std::ios::app); 
    boost::archive::text_oarchive oa(ofs); 
    oa << s; 
    ofs << "\n"; 
} 

そして私は、私は右だ、連絡先の番号を追跡する必要がある連絡先を取得しますか?私は、次のコードを使用して、単一の接触取得するには :ここ

void retrieve_contact(Contact &s, const char * filename) 
{ 
    std::ifstream ifs(filename); 
    boost::archive::text_iarchive ia(ifs); 
    ia >> s; 
} 

は、Contactクラス内のシリアライズ機能がどのように見えるかです:

template<class Archive> 
    void serialize(Archive & ar, const unsigned int version) 
    { 
     ar & m_CompanyName; 
     ar & m_FirstName; 
     ar & m_LastName; 
     ar & m_PhoneNumbers; 
    } 

(m_CompanyName、m_FirstNameとm_LastNameははstdている::文字列を、m_PhoneNumbersですstd :: vector) どうやら連絡先の数を追跡せずに連絡先を取得する方法はありますか?または、別の時間に保存された連絡先を保存して取得する別の方法を提案することはできますか?また、連絡先を変更するために保存されたファイルを編集するにはどうしたらいいですか?

+0

1質問。あなたはアーカイブを "編集"しません。あなたは新しいアーカイブを作成します。 – sehe

+0

@sehe答えをありがとう。私はそれを念頭に置いておきます。 – Bojan

答えて

0

ええ、標準コンテナにあらかじめ定義されたシリアル化を使用してください。したがって、たとえば

#include <boost/serialization/vector.hpp> 

そして

void retrieve_contact(std::vector<Contact>& s, const char * filename) 
{ 
    std::ifstream ifs(filename); 
    boost::archive::text_iarchive ia(ifs); 
    ia >> s; 
} 
関連する問題