Template return values?
    Era Scarecrow 
    rtcvb32 at yahoo.com
       
    Mon Dec  3 23:48:19 PST 2012
    
    
  
  A thought's been going through my head for a while now. I wonder 
about template return values. Function signatures are usually the 
inputs and NOT the return type. However for writing a variant 
type could be so very useful. So unless I've misunderstood, this 
doesn't work (but it would be cool if it did).
struct Variant {
   enum ValueType {Long, Float, Double}
   ValueType vt;
   union {
     long lng;
     float fl;
     double dbl;
   }
   T getValue(T)() @property
   if (T == long || T == float || T == double) { //allowable types
     static if (T == long) { //only long case written for brevity
       switch(vt) {
         //entries would likely be mixed in and not written 
manually...
         case Long: return lng;
         case Float:
           assert(lng >= float.min && lng <= float.max);
           return cast(float) lng;
         case Float:
           assert(lng >= double.min && lng <= double.max);
           return cast(double) lng;
       }
     }
     assert(0, "Fell through, should never get here");
   }
}
  So then in theory
  Variant v;
  int i = v.getValue; //calls getValue!int()
    
    
More information about the Digitalmars-d-learn
mailing list