toString refactor in druntime
Jonathan Marler via Digitalmars-d
digitalmars-d at puremagic.com
Sat Nov 1 05:52:28 PDT 2014
On Saturday, 1 November 2014 at 06:04:56 UTC, Jakob Ovrum wrote:
> On Saturday, 1 November 2014 at 05:27:16 UTC, Jonathan Marler
> wrote:
>> No need for the extra function, just call:
>>
>> x.toString(&(outputRange.put));
>
> That doesn't work for a wide variety of possible cases, notably
> when `put` is a function template or when the code depends on
> std.range.put or some other UFCS `put` function. As such, it
> should be avoided in generic code, and then you might as well
> avoid it in general, lest your algorithm unnecessarily ends up
> breaking with output ranges you didn't test for after
> refactoring.
>
> (Note that parantheses are not required in your example)
Ah yes, you are right that this wouldn't work in generic code.
Meaning, if the code calling toString was itself a template
accepting output ranges, then many times the &outputRange.put
wouldn't work. In this case I think the anonymous function is a
good way to go. I was more thinking of the case where the code
calling toString was user code where the outputRange was a known
type. Thanks for catching my silly assumption.
More information about the Digitalmars-d
mailing list