Function traits at compile time

Victor Nakoryakov nail-mail at mail.ru
Mon Jun 12 11:51:26 PDT 2006


Oskar Linde wrote:
> Victor Nakoryakov skrev:
> 
>> Hi all,
>>
>> Consider code:
>>
>> class MyClass(StructT)
>> {
>> ...
>> }
>>
>> I know, that StructT has a function `foo` in it, but I don't know 
>> number of parameters and their types, of course. Does anybody knows a 
>> way to extract types to use them in `static if ( is(...) )` statements?
> 
> 
> Hi,
> 
> This is possible but a bit tricky. You can use the compiler IFTI support 
> to extract this information. Make a template such as:
> 
> template delegateInfo(Ret, T1, T2, T3) {
>     Something!(Ret,T1,T2,T3) delegateInfo(Ret delegate(T1,T2,T3) x) {}
> }
> 
> The template Something can then contain aliases for the different 
> argument types.
> 
> http://www.digitalmars.com/drn-bin/wwwnews?digitalmars.D/38553 has 
> already implemented such templates for you (just change the function 
> argument -> delegate and you should be able to do things like:
> 
> class MyClass(StructT) {
>     static if (funcInfo(&StructT.init.foo).numArgs == 1) {
>         pragma(msg,"StructT.foo takes 1 argument");
>         }
>         static if (is(typeof(funcInfo(&StructT.init.foo).Arg0Type)
>                       == int)) {
>                 pragma(msg,"First argument to StructT.foo is an int");
>         }
> }
> 
> /Oskar

Oh, thanks a lot. Totaly forgot about IFTI! :)


-- 
Victor (aka nail) Nakoryakov
nail-mail [at] mail.ru

Krasnoznamensk, Moscow, Russia



More information about the Digitalmars-d mailing list