www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Runtime templates

Any ideas how to do the following at runtime with local variables?

enum Type { Void, Int, String }

template getType(Type value) {
   static if (value == Type.Int)
     alias int getType;
   else static if (value == Type.String)
     alias char[] getType;
   else
     alias void getType;
}

template makeDelegate(Type R, Type T1 = Type.Void, Type T2 = Type.Void) {
   static if (T2 != Type.Void)
     alias getType!(R) delegate(getType!(T1), getType!(T2)) makeDelegate;
   else static if (T1 != Type.Void)
     alias getType!(R) delegate(getType!(T1)) makeDelegate;
   else
     alias getType!(R) delegate() makeDelegate;
}

void main() {
   Type retType = /* call some function that returns a Type /*;
   Type paramType1 = /* ditto */;
   alias makeDelegate!(retType, paramType1) TypedDelegate;
}

Of course, this won't work because you can't use local variables as 
template arguments. Any possible workarounds, apart from passing 
compile-time constants?

John.
May 13 2006