Есть ли способ определить, осталось ли что-либо внутри архива буста после того, как я прочитал из него? Я попробовал этот кусок кода:
const string s1("some text");
std::stringstream stream;
boost::archive::polymorphic_text_oarchive oAr(stream);
oAr << s1;
boost::archive::polymorphic_text_iarchive iAr(stream);
string s2;
iAr >> s2;
if (!stream.eof())
{
// There is still something inside the archive
}
Я ожидал, что объект потока будет обновлен так, как будто я читаю непосредственно с него, но в приведенном выше коде stream.eof()
всегда false
, хотя я читаю все, что написал. Изменение строки на int дало тот же результат.
Причина, по которой я захотел эту способность, заключается в ситуациях, когда я читаю не те типы, которые пишу:
const string s1("some text");
std::stringstream stream;
boost::archive::polymorphic_text_oarchive oAr(stream);
oAr << s1;
boost::archive::polymorphic_text_iarchive iAr(stream);
int s2;
iAr >> s2; // string was written but int is read
Я знаю, что в этой ситуации я мало что могу сделать, но я надеялся, что, по крайней мере, проверка того, что я прочитал все, даст мне некоторое представление о том, было ли какое-то несоответствие между чтением и записью. Есть идеи?