Array of templated classes or structs
    TheFlyingFiddle via Digitalmars-d-learn 
    digitalmars-d-learn at puremagic.com
       
    Sat Oct 24 12:00:56 PDT 2015
    
    
  
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/jiucsrcvkfdzwinqpzxg@forum.dlang.org) if your interested in some cool stuff that can be done to call methods on such variant structs.
    
    
More information about the Digitalmars-d-learn
mailing list