Fun with templates

Manu turkeyman at gmail.com
Fri Jul 5 20:33:44 PDT 2013


On 6 July 2013 11:42, finalpatch <fengli at gmail.com> wrote:

> On Saturday, 6 July 2013 at 01:35:09 UTC, Manu wrote:
>
>> Okay, so I feel like this should be possible, but I can't make it work...
>> I want to use template deduction to deduce the argument type, but I want
>> the function arg to be Unqual!T of the deduced type, rather than the
>> verbatim type of the argument given.
>>
>> I've tried: void f(T : Unqual!U, U)(T a) {}
>> and: void f(T)(Unqual!T a) {}
>>
>> Ie, if called with:
>>   const int x;
>>   f(x);
>> Then f() should be generated void f(int) rather than void f(const int).
>>
>> I don't want a million permutations of the template function for each
>> combination of const/immutabe/shared/etc, which especially blows out when
>> the function has 2 or more args.
>>
>> Note: T may only be a primitive type. Obviously const(int*) can never be
>> passed to int*.
>>
>
> this?
>
> template f(T)
> {
>     void f (T x)
>     {
>         f_i(x);
>     }
>     void f_i(Unqual!T x)
>     {
>         writefln("%s", x);
>     }
> }
>

And again, f(T), the signature is wrong. There is also an additional
call... twice as slow when non-optimised :/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puremagic.com/pipermail/digitalmars-d/attachments/20130706/86005464/attachment.html>


More information about the Digitalmars-d mailing list