Boost logo

Boost Users :

Subject: Re: [Boost-users] [Serialization] Runtime checking of types indeserialization
From: Robert Ramey (ramey_at_[hidden])
Date: 2008-10-28 17:13:25


XML archives check that the reading tag matches the writing tag.

This is convenient and helpful for checking your code even
if you don't plan to use xml archives on your deliverable.

Robert Ramey

Frank Winklmeier wrote:
> Hi,
>
> is there any way to check whether the class type used in
> deserialization is identical to the class type in the serialization?
> Below is a simple example, that serializes class "Data" into a text
> archive and deserializes this archive into class "StringData". If
> that happens I would like an exception to be thrown. Is this possible?
>
> Thanks for any help,
> Frank
>
>
>
> #include <boost/archive/text_oarchive.hpp>
> #include <boost/archive/text_iarchive.hpp>
>
> #include <iostream>
> #include <sstream>
>
> using namespace std;
>
> class Data {
> public:
> Data() { for (int i=0; i<100; i++) a[i]=i; };
> int a[100];
>
> template<class Archive>
> void serialize(Archive & ar, const unsigned int) { ar & a; }
> };
>
> class StringData {
> public:
> StringData() {};
> string s;
>
> template<class Archive>
> void serialize(Archive & ar, const unsigned int) { ar & s; }
> };
>
>
> int main() {
>
> ostringstream oss;
>
> // Serialize the class
> const Data d1;
> {
> boost::archive::text_oarchive oa(oss);
> oa << d1;
> }
>
> // Deserialize it using the wrong type
> StringData d2;
> {
> istringstream iss(oss.str());
> boost::archive::text_iarchive ia(iss);
> ia >> d2;
> }
>
> cout << oss.str() << endl;
> cout << d2.s << endl;
> }
>
> Output:
> =======
> 22 serialization::archive 4 0 0 100 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
> 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
> 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
> 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
> 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
>
> 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
> 27 28 29 30 31 32 33 34 35 36


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