"hijackable"/"customizable" keyword for solving the "customized algorithm" issue?
Yota via Digitalmars-d
digitalmars-d at puremagic.com
Fri May 16 09:45:28 PDT 2014
On Thursday, 15 May 2014 at 17:08:58 UTC, monarch_dodra wrote:
> On Thursday, 15 May 2014 at 12:16:52 UTC, Steven Schveighoffer
> wrote:
>> On Thu, 15 May 2014 02:05:08 -0400, monarch_dodra
>> <monarchdodra at gmail.com> wrote:
>>
>>> "move" will also delegate to "proxyMove".
>>
>> This is the correct solution IMO. The principle of least
>> surprise should dictate that a.foo should always mean the same
>> thing. All that is required to enforce this is to make the
>> "hook" function have a different name.
>
> The issue(s) I have with the "hook must have a different name"
> is:
> 1. In the algorithm implementation, you must explicitly test
> for the hook, which, if we want to expand on, would turn all
> our algorithms into:
> void foo(T)(T t)
> {
> static if (is(typeof(t.fooHook())))
> return t.fooHook();
> else
> ...
> }
> 2. The "overriden" hook is only useful if you import the
> corresponding algorithm. So for example, in my 3rd pary
> library, if my type has "findHook", I'd *have* to import
> std.algorithm.find for it to be useful. Unless I want to make a
> direct call to "findHook", which would be ugly...
How about a middle ground? Have the function names be identical,
and decorate the member version with @proxy or @hook, rather than
decorating the original definition. I'd find this to be less
surprising.
More information about the Digitalmars-d
mailing list