Checking for Callabilty of either f(x) or x.f
    "Nordlöw" via Digitalmars-d-learn 
    digitalmars-d-learn at puremagic.com
       
    Fri Aug  1 07:20:53 PDT 2014
    
    
  
I'm currently developing a pretty printing system in D with 
backend support for text, html, mathml, latex, etc.
To make it loosely decoupled in compile-time if currently make 
use __traits in  the following way.
     static if (__traits(hasMember, arg, "toHTML"))
     {
         if (viz.form == VizForm.HTML)
         {
             return viz.ppRaw(arg.toHTML);
         }
     }
     else static if (__traits(hasMember, arg, "toMathML")) // 
TODO: Change to __traits(compiles, auto x = arg.toMathML()) or 
*callable*
     {
         if (viz.form == VizForm.HTML)
         {
             // TODO: Check for MathML support on backend
             return viz.ppRaw(arg.toMathML);
         }
     }
     else static if (__traits(hasMember, arg, "toLaTeX"))
     {
         if (viz.form == VizForm.LaTeX)
         {
             return viz.ppRaw(arg.toLaTeX);
         }
     }
A more flexible solution is to not require toX to be a member 
function of type specific (system) types to printed.
What is the preffered (fast) way to check at compile-time if an 
instance x of a type T can be used *either* as
     f(x)
or
     x.f?
    
    
More information about the Digitalmars-d-learn
mailing list