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