Serialization/deserialization of templated class
Steven Schveighoffer via Digitalmars-d
digitalmars-d at puremagic.com
Thu Jun 29 07:49:39 PDT 2017
On 6/28/17 1:52 AM, Dmitry Solomennikov wrote:
> On Wednesday, 28 June 2017 at 05:01:17 UTC, Eugene Wissner wrote:
>> On Wednesday, 28 June 2017 at 04:41:25 UTC, Dmitry Solomennikov wrote:
>
>
>> Probably if you have serialized data, you convert strings to other
>> types, so it may be possible to perfom if-checks:
>> if (myDataIsStringAndDouble(data))
>> {
>> auto var = new Some!(Pair!(string, double))(new Pair!(string,
>> double)("df", 5.0));
>> }
>> else if (myDataIsStringAndInt(data))
>> {
>> auto var = new Some!(Pair!(string, int))(new Pair!(string,
>> int)("df", 5));
>> }
>
> It is possible, but it is not a general solution. I've posted couple of
> sample classes, but there are more complicated cases, of course, and it
> well be combinatorial explosion here.
>
> I got the Variant idea, I'll give it a try.
> From other point of view, is there a reflection, say
>
> auto i = newInstance("Pair!(int, string)(10, \"asdf\")"),
No, because the class itself doesn't eixst until you instantiate it.
Certainly if you want to write out all the possible instantiations, it's
possible, via the mechanisms already specified above. What I would do is
create a newInstance *template* that takes a string and generates a
function that would build it from that string. Then you can feed a
sample file that contains all the possible instantiations to it at
*compile time* (via import strings), and then you can automatically
build the code that would be able to parse it. Finally, send the real
file at runtime.
> something like in Java?
It's important to realize that Java's generics are completely different
than D's templates. They are a compile-time wrapping around a runtime
construct. Of course, it's possible to mimic Java, but you won't get
templates out of it, more like Variant holders.
-Steve
More information about the Digitalmars-d
mailing list