www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - aliases and templates

reply Trass3r <mrmocool gmx.de> writes:
I already read about "Implicit Template Properties":
If a template has exactly one member in it, and the name of that member 
is the same as the template name, that member is assumed to be referred 
to in a template instantiation

I guess the following is something similar, but why are aliases used here?

template ParameterTypeTuple(dg)
{
     static if (is(dg P == function))
	alias P ParameterTypeTuple;
     else static if (is(dg P == delegate))
	alias ParameterTypeTuple!(P) ParameterTypeTuple;
     else static if (is(dg P == P*))
	alias ParameterTypeTuple!(P) ParameterTypeTuple;
     else
	static assert(0, "argument has no parameters");
}
Jan 22 2009
next sibling parent Jarrett Billingsley <jarrett.billingsley gmail.com> writes:
On Thu, Jan 22, 2009 at 10:56 AM, Trass3r <mrmocool gmx.de> wrote:
 I already read about "Implicit Template Properties":
 If a template has exactly one member in it, and the name of that member is
 the same as the template name, that member is assumed to be referred to in a
 template instantiation

 I guess the following is something similar, but why are aliases used here?

 template ParameterTypeTuple(dg)
 {
    static if (is(dg P == function))
        alias P ParameterTypeTuple;
    else static if (is(dg P == delegate))
        alias ParameterTypeTuple!(P) ParameterTypeTuple;
    else static if (is(dg P == P*))
        alias ParameterTypeTuple!(P) ParameterTypeTuple;
    else
        static assert(0, "argument has no parameters");
 }
Aliases are members too.
Jan 22 2009
prev sibling parent ws <wisiong gmail.com> writes:
Trass3r Wrote:

 I already read about "Implicit Template Properties":
 If a template has exactly one member in it, and the name of that member 
 is the same as the template name, that member is assumed to be referred 
 to in a template instantiation
 
 I guess the following is something similar, but why are aliases used here?
 
 template ParameterTypeTuple(dg)
 {
      static if (is(dg P == function))
 	alias P ParameterTypeTuple;
      else static if (is(dg P == delegate))
 	alias ParameterTypeTuple!(P) ParameterTypeTuple;
      else static if (is(dg P == P*))
 	alias ParameterTypeTuple!(P) ParameterTypeTuple;
      else
 	static assert(0, "argument has no parameters");
 }
Without the alias you will be declaring a variable. With it you are aliasing a type.
Jan 23 2009