Boost logo

Boost Users :

Subject: Re: [Boost-users] [serialization] transparently treating a class like abuilt-in type
From: Kenneth Riddile (kfriddile_at_[hidden])
Date: 2010-07-27 18:37:52


On 7/27/2010 12:38 PM, Robert Ramey wrote:
> Kenneth Riddile wrote:
>> I have some xml archives that store a lot of floating point values. I
>> would like to read these into a program that is designed to easily
>> switch between using floats and a custom fixed-point type via a
>> typedef. The way that would be easiest would be to add a serialize()
>> method to the fixed-point class definition. However, the xml archive
>> requires that I use an nvp wrapper. Since the data was originally
>> serialized out as plain floats, the data looks something like this:
>>
>> <x>0.95260203</x>
>> <y>0.87517798</y>
>> <z>0.54323343</z>
>>
>> whereas, to serialize this into my fixed-point type, it would need
>> another level of indirection due to the additional required nvp
>> wrapper like so:
>>
>> <x><value>0.95260203</value></x>
>> <y><value>0.87517798</value></y>
>> <z><value>0.54323343</value></z>
>>
>> Is there a way to accomplish what I'm trying to do? The fixed-point
>> type is convertible from (but not to) a float if that helps.
>
> This doesn't have anything to do with serialization per se.
>
> After loading, call a function which does whatever conversion you want to
> do.
>
> Robert Ramey

I'm not sure I described things well enough. Say I have the following:

typedef float Real;
typedef Vector3<Real> Vector;

and I have some xml archives containing serialized Vector objects that
look like this:

<x>-0.70032406</x>
<y>-0.65001774</y>
<z>0.29499683</z>

Now, I won't be able to read in this archive if I change the Real
typedef like so:

typedef FixedPointClass Real;

Even if I make FixedPointClass serializable, the data would need to
contain an additional name-value pair for it to be readable, like so:

<x><value>-0.70032406</value></x>
<y><value>-0.65001774</value></y>
<z><value>0.29499683</value></z>

I know that I can fix this problem by splitting the serialization of
Vector into save and load and explicitly loading floats and doing the
conversion. The problem with that is that I have several other types in
the same situation as Vector. I don't want to do it for all of them if
I don't have to. I would rather do something once that's specific to
FixedPointClass since that makes the most sense. Any suggestions or
should I get started on writing lots of save/load templates?


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