|
Boost Users : |
Subject: [Boost-users] [serialization] EOF marker?
From: Ramey, Larry (c_lramey_at_[hidden])
Date: 2013-04-15 10:59:01
Is there a way to serialize an unknown number of items and then read them back? In essence, I'd like to do this:
Ignore the variables being serialized, these are pointers to base classes, they go in and out just fine.
try
{
ofstream ofs(fileName.c_str(),ios::binary);
portable_binary_oarchive oa(ofs);
//boost::archive::text_oarchive oa(ofs);
oa<<qdc
<<qdf
<<qdenv
<<qdmsg
<<qsd
<<qdfc
<<qdce;
}
catch(boost::archive::archive_exception& ae)
{
cout<<ae.what();
}
try
{
ifstream ifs(fileName.c_str(),ios::binary);
portable_binary_iarchive ia(ifs);
//boost::archive::text_iarchive ia(ifs);
while( true )
{
ia>>qdc2;
cout<<qdc2->GetElementDebugType()<<endl;
delete qdc2;
qdc2=NULL;
}
}
catch(boost::archive::archive_exception& ae)
{
cout<<ae.what();
}
catch( std::exception& e)
{
cout<<e.what();
}
What happens is that an exception gets tossed with this message:
5
2
14
1
3
18
Access violation - no RTTI data!
The numbers are correct, those are the elements that got serialized. I'd like to do something like:
while( ia )
{
Ia>>qdc2;
}
But there is no () operator on an portable_binary_iarchive . I tried to do the test on the input stream, but that didn't work either. I don't know how many elements there are because I'm writing them as I go, I don't want to catch that exception as the EOF marker, because it really isn't the correct exception for that. I tried walking through the serialization code to see where it actually reads a byte stream form the file... but I'm apparently not smart enough to unravel that much templated Macro awesomeness. :)
Larry E. Ramey
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net