Templates and expressions

Frits van Bommel fvbommel at REMwOVExCAPSs.nl
Sun Feb 25 13:31:27 PST 2007


renoX wrote:
> Hello,
> 
> I've made a template to have a better (in my mind) format for printing, 
> so like writef the template take a tuple of argument as a parameter, it 
> works well when the parameter are variable but my problem is that if an 
> argument of the template is an expression, there is a compilation time 
> failure..
> 
> Ie putf!(x+y) fails to compile..

And it always will as long as (x+y) is not a compile-time constant, 
which is (at least) as long as x and/or y is itself not a compile-time 
constant.

> If I change the prototype to wrap everything in a string, the problem 
> now is that as everything is a string I loose access to the type of the 
> parameters, which I use..
> 
> Is-there a way to solve this problem?

typeof(mixin("x+y")) ?

Or, if it's an option in your implementation, you could generate code 
that passes the arguments as parameters to a template function, using 
IFTI to get at the types.

> Meta-programming in D will stay quite limited if you're obliged to wrap 
> every expression in a string IMHO..

Only expressions that aren't compile-time constants need to be wrapped 
in a string (and ones whose type is not a valid template parameter type).

Walter[1] has been talking about passing expressions as alias parameters 
or something like that, so maybe this will change.


[1]: and/or Andrei


More information about the Digitalmars-d-learn mailing list