On Thu, Dec 13, 2012 at 11:56 AM, js.mdnq <js_adddot+m...@gmail.com> wrote:
> I need to get the number of type parameters of a class at compile time: > > > class a(T1, T2, ...) > { > static if (a.TypeInfo.NumParameters == 1) > .... > else > .... > > } > > Is this possible? > Yes, it's possible: // Inside the class, it's easy: class Test(T...) { enum num = T.length;// T is known here } // Outside the class, it's a bit tricky, but quite doable: template TemplateArity(Type) { enum T = Type.stringof; mixin("alias " ~ T ~ " U;"); static if (is(Type _ == U!Args, Args...)) enum TemplateArity = Args.length; else enum TemplateArity = -1; } void main() { alias Test!(int, double, string) T; assert(T.num == 3); // Internal knowledge assert(TemplateArity!T == 3); // External deduction }