Rebind template(bug?)
    Jack Applegame via Digitalmars-d-learn 
    digitalmars-d-learn at puremagic.com
       
    Mon Aug 22 00:54:36 PDT 2016
    
    
  
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);
}
    
    
More information about the Digitalmars-d-learn
mailing list