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.

Reply via email to