On Thursday, 22 February 2018 at 19:26:54 UTC, Andrei
Alexandrescu wrote:
template PackedAliasSeq!(T...)
{
alias expand = AliasSeq!T;
}
I started playing around with this a few days ago, and came up
with another interesting abstraction - NamedPack:
alias foo = NamedPack!("Type", int, "name", "foo");
assert(is(foo.Type == int));
assert(foo.name == "foo");
assert(foo.equals!(NamedPack!("Type", int, "name", "foo")));
And for good measure, a helper to define your own 'compile-time
structs', for want of a better word:
alias Field = DefinePack!("Type", Type, "name", string,
"offset", int);
alias field1 = Field!(int, "a", 0);
assert(is(field1.Type == int));
assert(field1.name == "a");
assert(field1.offset == 0);
assert(field1.equals!(NamedPack!("Type", int, "name", "a",
"offset", 0)));
One benefit over regular structs being of course that these will
never end up in the binary.
The more structured nature of this construct over the simple Pack
template makes it useful where information would otherwise be
encoded in the order of elements, as e.g. in pull #6192.
Implementation and some more documentation:
https://gist.github.com/Biotronic/8a2664c050f01aed5e0c45950509022b
--
Simen