Kinds of containers

Andrei Alexandrescu via Digitalmars-d digitalmars-d at puremagic.com
Wed Oct 21 12:19:23 PDT 2015


On 10/21/2015 02:32 PM, Jonathan M Davis wrote:
> On Wednesday, 21 October 2015 at 18:24:30 UTC, Robert burner Schadek wrote:
>> On Wednesday, 21 October 2015 at 17:23:15 UTC, Andrei Alexandrescu wrote:
>>> Even simpler, hasMethod!(Container, "append") -- Andrei
>>
>> I know this goes against your talk at DConf, but having to write
>> string parameters does not feel good. I'm will properly not be the
>> only one who will mistype "apend" and wonder why the other template
>> function will be chosen. I rather have the compiler scream at me
>> telling me there is no symbol hasApend. And hasAppend!Container is
>> less typing than hasMethod!(Container, "append").
>
> The other concern is that hasMethod isn't going to be checking anything
> other than the name, whereas a hasAppend could actually check that the
> function accepts the right arguments and returns the correct type.
>
> And it's not like the list of the functions to check for is going to be
> infinite. It needs to be a known list of functions where each of those
> functions has a signature that meets certain requirements. You can't
> just be checking for a random function name and expect it to do what you
> want. So, having a list of explicit traits to use for testing for the
> expected set of functions will both allow for the tests to be more
> thorough than simply checking the name, _and_ it will serve as a way to
> help document what the list of expected functions is for a particular
> domain.
>
> I really think that using hasMethod by itself like that is getting too
> ad hoc and doesn't really benefit us over having an explicit list of
> traits for the specific domain that we're dealing with. I totally buy
> that testing for each of the specific functions rather than trying to
> put all of that information in the type itself (e.g.
> ContainerWithAppendAndRemove) simply isn't going to scale, but I don't
> at all buy that using hasMethod to test for the existence of member
> functions is a good way to go.

I'd say let's first have a Pope before becoming more Catholic than him. 
-- Andrei



More information about the Digitalmars-d mailing list