Boost logo

Boost :

Subject: [boost] Details on boost::serialization
From: Per Nordlöw (per.nordlow_at_[hidden])
Date: 2009-08-02 16:31:46


I haven't found any documentation on the header bits of the archive formats
supported by boost::serialization. These are added as default when I
construct binary and text formats. I am especially interested in skipping
these headers completely in my application, that is serializing a char
should only result in one byte outputted to stream.

Does the headers basic_binary_[io]archive.hpp play any roles in this case? I
have tried to use them instead by I got some strange error messages so these
are commented out here.

Thanks in advance,
Nordlöw

Compileable sample code follows:

#include <fstream>

// #include <boost/archive/basic_text_iarchive.hpp>
// #include <boost/archive/basic_text_oarchive.hpp>

#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/text_oarchive.hpp>

#include <boost/archive/binary_iarchive.hpp>
#include <boost/archive/binary_oarchive.hpp>

class gps_position
{
public:
    gps_position() {};
    gps_position(int d, size_t m, float s) : degrees(d), minutes(m),
seconds(s) {}
private:
    friend class boost::serialization::access;
    template<class Archive>
    void serialize(Archive & ar, const unsigned int version) { ar & degrees
& minutes & seconds; }
    int degrees;
    size_t minutes;
    float seconds;
};

template<class OA, class IA>
static void test(const gps_position & pos, const char * filename)
{
    std::ofstream ofs(filename); // create and open a character archive for
output
    {
        OA oa(ofs);
        oa << pos;
    }

    gps_position newg;
    {
        std::ifstream ifs(filename); // create and open an archive for input
        IA ia(ifs);
        ia >> newg;
    }
}

int main() {
    const gps_position p(35, 59, 24.567f);

    // test<boost::archive::basic_text_oarchive,
    // boost::archive::basic_text_iarchive>(p,
"boost_serialization_basic_text_archive");

    test<boost::archive::text_oarchive,
        boost::archive::text_iarchive>(p,
"boost_serialization_text_archive");

    test<boost::archive::binary_oarchive,
        boost::archive::binary_iarchive>(p,
"boost_serialization_binary_archive");

    return 0;
}


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk