On Saturday, 24 October 2015 at 18:40:02 UTC, TheFlyingFiddle
wrote:
To complete TemplateStruct simply forward the remaing members
of the
variant. Or use something like proxy!T in std.typecons. Or use
an alias this v.
(I don't really recommend alias this it has all kinds of
problems)
One thing about variant is that if the struct you are trying to
insert is larger then (void delegate()).sizeof it will allocate
the wrapped type on the gc heap. This might be detrimental to
performance. So to help with this you could add an extra element
on the TemplateStruct to sort of handle this.
struct TemplateStruct(alias template_, size_t size = (void
delegate).sizeof)
{
VariantN!(size) v;
//Rest is the same.
}
Pick a good size for the template you want to make arrays of and
it will lessen the stress on the gc heap.
For example:
struct vec4(T)
{
T[4] data;
//stuff
}
alias Vector4 = TemplateStruct!(template_, vec4!(double).sizeof);
Vector4[] array;
Additionaly you might want to look into the
(http://forum.dlang.org/thread/jiucsrcvkfdzwinqp...@forum.dlang.org) if your interested in some cool stuff that can be done to call methods on such variant structs.