Hello,
In Lisp-like languages, a list can hold anything:
(1 "a" (1 "a"))
I do not find it trivial to simulate this in D. Using a linked list or an
array: the issue is not with the kind of collection but with elements. In
either case, I guess, elements should actually be void* pointers. But then, the
type is lost; to properly get back stored values, it seems one would have to
add tagged-union-like tagging --but for pointers.
How would you do that? Various proposals welcome :-)
Side-issue: to cast back elements, I wanted to store the actual element type.
But I could not find a way to do that, instead get weird error messages like eg
'int' is not a value (so, what else?). For a typed collection (template), it is
well possible to store the element type, like eg:
struct List(T) {
alias T Element;
...
}
But this indeed gives a typed collection. So, what's the issue indicated by the
error?
If I don't have the type, the tag can only be a pseudo-thingie (possibly member
of an enum) used with a possibly very long switching sequence. Meaning instead
of something like:
value = *(cast(type*)element); // type is called 'type'
I need to write:
if (type == Types.integer) // enum 'Types'
value = *(cast(int*)element);
else if .......
Very annoying.
Denis
-- -- -- -- -- -- --
vit esse estrany ☣
spir.wikidot.com