Le 2010-08-08 à 6:46, Jacob a écrit :

> On 8 aug 2010, at 07:47, Andrei Alexandrescu wrote:
> 
>> I think that would be great. Knowing nothing about Orange, I visited the 
>> website and read the feature lists and the tutorial (the reference seems to 
>> be missing for now). The latter contains:
>> 
>> auto a2 = serializer.deserialize!(A)(data);
>> 
>> which seems to require compile-time knowledge of the deserialized type. I'd 
>> expect the library to support something like
>> 
>> Object a2 = serializer.deserialize!Object(data);
> 
> This is currently not possible in the library. I'm not sure if that would be 
> possible, how would you deserialize a struct for example? There is no factory 
> function for structs like there is for classes.

But there's no concept of derived struct. For a struct you always know the type 
at compile-time. The only way to hide a struct would be behind a void* or 
void[], but trying to serialize/unserialize that type automatically (without 
the user writing the serialization code itself) is pointless.

Or you could hide it behind a variant, in which case the variant's 
serialization should remember the type name so it can find a proper 
deserializer on the other side. How exactly it does that? Either with better 
runtime-reflection, or with pre-registered handlers on the unserializer's side 
(not very convenient).


> Since all the static types of the objects would be Object how would I set the 
> values when deserializing? Or would Variant be useful here? I have not used 
> Variant.

At this point I've been unable to serialize/unserialize a variant.

Another interesting point: it's probably necessary to be tolerant of type 
differences. For instance, if I serialize a size_t on a machine and unserialize 
it elsewhere, it might not be the same underlying integral type.


-- 
Michel Fortin
[email protected]
http://michelf.com/



_______________________________________________
phobos mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/phobos

Reply via email to