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