DIP 1020--Named Parameters--Community Review Round 2

Yuxuan Shui yshuiv7 at gmail.com
Thu Sep 12 18:00:19 UTC 2019


On Thursday, 12 September 2019 at 14:36:09 UTC, rikki cattermole 
wrote:
> On 13/09/2019 1:44 AM, Yuxuan Shui wrote:
>> On Thursday, 12 September 2019 at 12:06:47 UTC, rikki 
>> cattermole wrote:
>>> On 12/09/2019 11:50 PM, Yuxuan Shui wrote:
>>>> On Thursday, 12 September 2019 at 11:46:46 UTC, rikki 
>>>> cattermole wrote:
>>>>> [...]
>>>>
>>>> Ah, sorry. I meant to write draw(shape: someShape).
>>>
>>> In that case, two methods:
>>>
>>> 1. void draw(Shape)(@named Shape shape) { draw(shape); }
>>>
>>> 2. void draw(Shape:Circle)(@named Shape shape) { draw(shape); 
>>> }
>>>
>>> The second is better because of validating the parameter 
>>> type, but does require one per type. Assuming I remember this 
>>> particular bit of templates correctly.
>>>
>>> I had to assume that drawing has to be specific to the type 
>>> passed in and that the draw function will be concrete (can be 
>>> virtual). But that shouldn't be a problem.
>> 
>> Sorry, I don't think I understand your answer. My question has 
>> nothing to do with templates.
>
> To get the functionality you asked about, I had to use 
> templates.
>
> To support overloading on named parameters would require 
> invasive changes and adding a new mangling sequence. Things I 
> want to avoid.
>
> a11e99z asked a similar question under your own in this part of 
> the thread tree. Same answer.

No, I am not asking for overloading based on name. The two 
functions are clearly distinct based purely on parameter types.

I think this basically means you cannot create functions with 
only @named parameters. I consider this a pretty serious 
limitation.


More information about the Digitalmars-d mailing list