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