I am using ifstream and and ostream to serialize my data but I am surprised to discover the `<<‘ operator can’t seperate two adjacent strings and seperating them would be quite complicated.
class Name
{
string first_name;
string last name;
friend std::ostream& operator<< (std::ostream& os, const Name& _name)
{
os << _name.first_name << _name.last_name;
return os;
}
friend std::istream& operator>> (std::istream& is, Name& _name)
{
is >> _name.first_name >> _name.last_name;
return is;
}
This doesn’t work because << and >> doesn’t write null terminator characters and ifstream reads the whole string in variable (first_name) which is kinda disappointing. How can I store the two strings separately so I can read them separately as well? I don’t understand what is the motivation of << concatenating all the strings in ostream so we can’t read them back seperatly!?
Often times you want to concatenate strings with
ostream(commonlystringstream). If you specifically don’t want them concatenated it’s easy enough to do:os << _name.first_name << '\n' << _name.last_name;