std.functional:partial - disambiguating templated functions

Laeeth Isharc via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun Oct 4 10:11:18 PDT 2015


On Sunday, 4 October 2015 at 16:37:34 UTC, John Colvin wrote:
> On Sunday, 4 October 2015 at 15:45:55 UTC, Laeeth Isharc wrote:
>> How do I persuade partial to tie itself to the appropriate 
>> overload?
>> I have:
>>
>> alias 
>> bars=partial!(slurpBars!BarType,filename,startDate,endDate);
>>
>> where there are two overloads of slurpBars:
>>
>> SomeBar[] slurpBars(SomeBar)(string filename,string 
>> datasetName, typeof(SomeBar.date) startDate, 
>> typeof(SomeBar.date) endDate)
>> SomeBar[] slurpBars(SomeBar)(hid_t filehandle,string 
>> datasetName, typeof(SomeBar.date) startDate, 
>> typeof(SomeBar.date) endDate)
>>
>> And I receive the following error:
>>  Error: template kprop.marketdata.retrievebars.slurpBars 
>> matches more than one template declaration:
>>
>> Thanks.
>>
>>
>> Laeeth.
>
> As far as I can see std.functional.partial only does one 
> argument at a time.
>
> bars=partial!(partial!(partial!(slurpBars!BarType, filename), 
> startDate), endDate);
>
> or maybe, I'm not sure, but maybe you can do:
>
> bars=partial!(slurpBars!BarType, AliasSeq!(filename, startDate, 
> endDate));
>
> If you find you really need to manually mess with overloads, 
> use http://dlang.org/traits.html#getOverloads. You may have to 
> wrap it in AliasSeq in some situations due to grammar/parser 
> constraints.


Thanks, John.  I will give that a try.


Laeeth.


More information about the Digitalmars-d-learn mailing list