An idea to improve eponymous templates

kenji hara k.hara.pg at gmail.com
Wed Apr 11 20:56:14 PDT 2012


It conflicts with ”alias this” syntax.

template Inherits(T)
{
  T value;
  alias T Inherits;   // (1) Inherits!int == int
  alias T this;   // (2) declares "alias this"!
}
struct S {
  mixin Inherits!int;  // (1) invalid or (2) mixing alias this declaration?
}

Kenji Hara

2012年4月12日11:21 Reid Levenick <reid.whitewater+dlang at gmail.com>:
> 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.


More information about the Digitalmars-d mailing list