templates

ddos via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Jul 17 13:35:26 PDT 2014


for example and learning purpose i want to create an arithmetic 
vector class.

for a vector of arbitrary size i defined my opBinary like this:

class TVector(T,int n)
{
   T[n] val;
   .....

   TVector opBinary(string op)(TVector rhs)
   {
     auto tmp = 
zip(val[],rhs.val[]).map!("a[0]"~op~"a[1]")().array;
     T[n] v = tmp[];
     return new TVector!(T,n)(v);
   }
}

now assume i do often need TVector!(T,4) in my program, and i 
want to optimize this implementation, is it possible to write a 
specialized implementation for methods of TVectors with the 
specific template parameters?

e.g.: (not working)

class TVector!(T,4)
{
   TVector4!(T) opBinary(string op)(TVector4!(T) rhs)
   {
     static if (op == "+")
     {
       return new TVector4!T( [val[0]+rhs.val[0],
                               val[1]+rhs.val[1],
                               val[2]+rhs.val[2],
                               val[3]+rhs.val[3]]);
     }
     else static assert(0, "Operator "~op~" not implemented");
   }
}

one possible solution would be a static if, like this:

TVector opBinary(string op)(TVector rhs)
{
   static if(n == 4)
   {
     // fast impl for n==4
   }
   else
   {
     // old impl
   }
}

but i'd like to avoid this since it makes the code very ugly to 
read

any suggestions :) ?

thx for your help, greetings from vienna, austria :)


More information about the Digitalmars-d-learn mailing list