On Friday, 19 September 2014 at 18:46:14 UTC, IgorStepanov wrote:
On Friday, 19 September 2014 at 17:19:09 UTC, Andrei Alexandrescu
wrote:
On 9/19/14, 3:21 AM, Dicebot wrote:
On Friday, 19 September 2014 at 09:34:22 UTC, ponce wrote:
Call me unimaginative, but I'm struggling to see any use case for multiple alias this, and I struggle even more for such constructors
aliasing.


Pretty much every single time you have ever wanted to do multiple inheritance of implementation multiple `alias this` was the proper tool for a job. I notice myself thinking "this could have been done much
cleaner with multiple alias this" at least once a month :)

Yah, multiple subtyping of structs is terrific to have. Thanks Igor for this work! -- Andrei

You are welcome :)
BTW. Please comment (approve or correct) semantic rules, which
used for conflict resolving.
I've written it early and reflected it in the PR tests.

Further, could this also be used to somehow simplify
hierarchically defined enumerators? Typically the enumerators and
predicates related to the enumeration WordKind defined here

enum can have a class as base type:

import std.stdio;

class Word
{
     this(string type)
     {
         this.type = type;
     }

     @property abstract string wordClass();

     override size_t toHash() @trusted
     {
         string s = toString();
         return typeid(string).getHash(&s);
     }

     override string toString() @trusted nothrow
     {
         try
         {
             return wordClass() ~ ":" ~ type;
         }
         catch(Throwable th)
         {
             assert(0);
         }
     }

     string type;
}

class Noun : Word
{
     this (string type)
     {
         super(type);
     }

     @property override string wordClass()
     {
         return "noun";
     }
}

class Verb : Word
{
     this (string type)
     {
         super(type);
     }

     @property override string wordClass()
     {
         return "verb";
     }
}

enum WordKind : Word
{
     Unknown = null,
     Numeric = new Noun("Numeric"),
     //...
     Present = new Verb("Present"),
}

import std.stdio;
void main()
{
     string[][WordKind] dictionary;
     dictionary[WordKind.Numeric] ~= "one";
     dictionary[WordKind.Numeric] ~= "two";
     dictionary[WordKind.Present] ~= "go";
     writeln(dictionary);
}

Does this code can help you?

Reply via email to