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