Rebind template(bug?)
Engine Machine via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Mon Aug 22 11:04:43 PDT 2016
On Monday, 22 August 2016 at 07:54:36 UTC, Jack Applegame wrote:
> On Monday, 22 August 2016 at 00:43:00 UTC, Engine Machine wrote:
>> The following code works and does what I want!
>>
>> template InstantiateOrEmptySeq(alias tmpl, args...)
>> {
>> alias Seq(T...)=T;
>> static if (args.length > 0)
>> alias InstantiateOrEmptySeq = tmpl!(args[0 .. $-1]);
>> else
>> alias InstantiateOrEmptySeq = Seq!();
>> }
>>
>>
>> class T(A...) : InstantiateOrEmptySeq!(T, A)
>> {
>> static if (A.length == 0)
>> {
>> // Base class
>> int x;
>> } else
>> static if (A[$-1] == "Animal")
>> {
>> int y;
>> } else
>> static if (A[$-1] == "Dog")
>> {
>> int z;
>> } else
>> static if (A[$-1] == "Pug")
>> {
>> int s;
>> } else static assert(A[$-1]~" not a defined class of
>> "~this.stringof);
>> }
>
> Why don't you like a cleaner (in my opinion) solution?
>
> class T() {
> // Base class
> int x;
> }
>
> class T(A...) : T!(A[0..$-1]) {
> static if (A[$-1] == "Animal")
> {
> int y;
> } else
> static if (A[$-1] == "Dog")
> {
> int z;
> } else
> static if (A[$-1] == "Pug")
> {
> int s;
> } else static assert(A[$-1]~" not a defined class of
> "~this.stringof);
> }
How do you seriously think this is cleaner/simpler? You have two
classes. Their is no uniformity between them. You have uniformity
between all the derived classes then have a special case for the
base class. A certain easy to follow pattern is set up but
needlessly break it for one case. Why?
More information about the Digitalmars-d-learn
mailing list