Simplifying conversion and formatting code in Phobos
    Dominikus Dittes Scherkl via Digitalmars-d 
    digitalmars-d at puremagic.com
       
    Fri Sep  9 01:40:24 PDT 2016
    
    
  
On Thursday, 8 September 2016 at 23:34:13 UTC, Walter Bright 
wrote:
> On 9/8/2016 5:10 AM, Andrei Alexandrescu wrote:
>>> Consider the pattern of overloads:
>>>
>>>    template foo(T) if (condition!T) { }
>>>    template foo(T) if (!condition!T) { }
>>>
>>> It makes condition!T a user-facing constraint, which it 
>>> should not be.
>>
>> This looks like a nice guideline. Good work. Pushing the roof 
>> now. -- Andrei
>
>
> An example of doing it better, the put() template:
>
>     
> https://github.com/dlang/phobos/blob/master/std/range/primitives.d#L295
>
> Something we need to move away from, the 17 overloads of 
> formatValue() in:
>
>     
> https://github.com/dlang/phobos/blob/master/std/format.d#L1319
>
> all that differ only in the constraint.
Yay! Finally!
This is exactly what I said in another recent thread:
overloads should be avoided, especially if something is meant to 
be for all types - do it with static if inside one function, 
which in turn will have MUCH MUCH easier constraints (or none at 
all).
I think overload is a most of the time useless C++ relict.
    
    
More information about the Digitalmars-d
mailing list