Overloading templates

Denis Koroskin 2korden at gmail.com
Thu Sep 25 14:01:59 PDT 2008


On Thu, 25 Sep 2008 22:12:16 +0400, Sean Kelly <sean at invisibleduck.org>  
wrote:

> Okay, it turns out that this works for me in D1 as well:
>
>     template find(alias equals)
>     {
>         size_t find(Buf, Pat)( Buf buf, Pat pat )
>         {
>             return 0;
>         }
>     }
>
>     template find(char[] equals = "a == b")
>     {
>         size_t find(Buf, Pat)( Buf buf, Pat pat )
>         {
>             return 0;
>         }
>     }
>
>     void main()
>     {
>         find!()( "abc", 'a' ); // compiles in D1
>         find( "abc", 'a' ); // doesn't compile in D1
>     }
>
> However, it doesn't work in D2.  There, basically the only syntax I can
> find that works is what's used in std.algorithm:
>
>     size_t find(alias equals = "a == b", Buf, Pat)( Buf buf, Pat pat )
>     {
>         return 0;
>     }
>
>     void main()
>     {
>         bool equals(char a, char b) { return a == b; }
>
>         find( "abc", 'a' );
>         find!("a == b")( "abc", 'a' );
>         find!(equals)( "abc", 'a' );
>     }
>
> This is really ideal, but the fact that I can't find any common syntax
> for D1 and D2 is not.  D1 doesn't allow aliasing strings but does
> seem to support some degree of overloading (even if doing so requires
> supplying an empty template parameter list), while D2 does allow
> aliasing strings but I can't get even that shoddy form of overloading
> to work.
>
> I was really hoping to find some way to allow tango.core.Array to use
> both its current delegate syntax and the new string syntax, but as it
> stands I don't think this is possible if the code must be portable
> between D1 and D2.
>
>
> Sean

Tango/D1 ought to be frozen and support dropped in favor of Tango/D2 at  
some point, but it is far from now, I think.


More information about the Digitalmars-d-learn mailing list