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.
J
Larry E. Ramey