static if and templates
Christian Kamm
kamm.incasoftware at shift-at-left-and-remove-this.de
Thu Sep 27 03:06:01 PDT 2007
Oliver wrote:
> bool isArray(T)(T expr){
> return (expr.mangleof)[0] == 'A';
> }
>
> bool isMatrix(T)(T expr){
> static if ( (expr.mangleof)[0] == 'A' ) // works
> //static if ( isArray(expr) ) // does NOT work
> return (expr.mangleof)[1] == 'A';
> else
> return false;
> }
Static if requires the condition to be evaluated at compile time, but expr
is a run time construct. You can make these two compile-time evaluateable
by switching to templates:
---
import std.stdio;
template isArray(T){
const isArray = (T.mangleof)[0] == 'A';
}
template isMatrix(T){
static if ( isArray!(T) )
const isMatrix = (T.mangleof)[1] == 'A';
else
const isMatrix = false;
}
void main () {
double s = 1.;
double[] v = [1.,2.];
double[][] m = [[1.,2.]];
writefln("s: ", isArray!(typeof(s)), " ", isMatrix!(typeof(s)) );
writefln("v: ", isArray!(typeof(v)), " ", isMatrix!(typeof(v)) );
writefln("m: ", isArray!(typeof(m)), " ", isMatrix!(typeof(m)) );
}
More information about the Digitalmars-d-learn
mailing list