Get class type parameters at compile time
js.mdnq
js_adddot+mdng at gmail.com
Thu Dec 13 16:07:30 PST 2012
On Thursday, 13 December 2012 at 22:10:40 UTC, Philippe Sigaud
wrote:
> On Thu, Dec 13, 2012 at 11:56 AM, js.mdnq
> <js_adddot+mdng at 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
> }
cool, I'll need it outside the class. Thanks.
More information about the Digitalmars-d-learn
mailing list