An idea to improve eponymous templates

Don Clugston dac at nospam.com
Thu Apr 12 02:46:05 PDT 2012


On 12/04/12 04:21, Reid Levenick wrote:
> Firstly, I had no idea where suggestions should go, and I saw a few
> others here and thus here I am.
>
> I was writing some code that depended heavily on my own eponymous
> templates, and decided to change the names of some of them to make them
> more self-documenting. However, after changing the name, I encountered a
> long stream of unintelligible errors (to me, I haven't been using D for
> a long time) about template instances.
>
> So, my idea is that the 'this' keyword could be used in templates as a
> shortcut for eponymous templates, allowing code like this
>
> template anEponymousTemplate( size_t whatever ) {
> enum this = whatever * 2;
> }
> template anotherOne( T ) {
> static if( is( T == class ) ) {
> alias long this;
> } else {
> alias int this;
> }
> }
>
> Which would reduce cruft and make it easier to read some templates, as
> well as reducing maintenance.

This has been suggested about 200 times...

As already mentioned, use of 'this' conflicts with 'alias this'.
I also think there are problems with local templates.

class S
{
    void foo()
    {
         template XX(int n) {
             alias this this; // !! first 'this' is S, second is XX
         }
         XX!(7) q;

    }
}

Another suggestion that was made in the past was 'return'. I suspect 
that doesn't work, either, because for example typeof(return) already 
has a meaning.



More information about the Digitalmars-d mailing list