#include #include #include #include #include using namespace std; struct Journal { string title; vector entries; explicit Journal(const string& title) : title{title} { } void add(const string& entry); // persistence is a separate concern void save(const string& filename); }; void Journal::add(const string& entry) { static int count = 1; entries.push_back(boost::lexical_cast(count++) + ": " + entry); } void Journal::save(const string& filename) { ofstream ofs(filename); for (auto& s : entries) ofs << s << endl; } struct PersistenceManager { static void save(const Journal& j, const string& filename) { ofstream ofs(filename); for (auto& s : j.entries) ofs << s << endl; } }; void main() { Journal journal{"Dear Diary"}; journal.add("I ate a bug"); journal.add("I cried today"); //journal.save("diary.txt"); PersistenceManager pm; pm.save(journal, "diary.txt"); }