Template tuple parameters of classes

ws wisiong at gmail.com
Fri Aug 1 00:52:46 PDT 2008


Tsalm Wrote:

> On Wed, 30 Jul 2008 21:33:05 -0400, ws wrote:
> 
> > TSalm Wrote:
> >> I've got a class MyClass :
> >>   class MyClass(T) {}
> >> 
> >> And I need them in Template Tuple Parameter. Something like this :
> >>   void myFunction
> >>           ( U:MyClass!(T),T , U2:MyClass!(T2),T2... ) ( U myClass , U2
> >>           myClass2...)
> >>   	  {  /* ...some code... */ }
> >> 
> >> 
> >> call by :
> >>   MyClass!(int) mine1;
> >>   MyClass!(double) mine2;
> >>   MyClass!(char) mine3;
> >>   myFunction( mine1 , mine2 , mine3 );
> >> 
> >> but.of course, 'myFunction' is incorrect... How to declare it ?
> >> 
> > 
> > Perhaps this post by Jarrett is of help:
> > http://lists.puremagic.com/pipermail/digitalmars-d/2007-
> October/026373.html
> 
> It is very interresting. Thanks.
> 
> 
> I'm trying this :
> /* -------------------- */
> class MyClass(T)
> {
>  T getTypeMin() {return T.min;}
> }
> 
> template Print(U ...)
> {
>   void Print()
>   {
>     Stdout(U[0].getTypeMin()).newline;
>   }
> }
> 
> void main()
> {
>   MyClass!(int) mine1;
>   MyClass!(double) mine2;
>   MyClass!(float) mine3;
>   
>   Print!(mine1,mine2,mine3);
> }
> /* -------------------- */
> 
> But the execution send me an Access Violation !?

The variables are not allocated.
Try this:
class MyClass(T)
{
T getTypeMin() {return T.min;}
}
template Print(U ...)
{
  void Print()
  {
    static if (U.length >= 1)
   {
     Stdout(U[0].getTypeMin());
     Print!(U[1..$]);
   }
 }
}

void main()
{
  auto mine1 = new MyClass!(int);
  auto mine2 = new MyClass!(double);
  auto mine3 = new MyClass!(float);  
  Print!(mine1,mine2,mine3);
}



More information about the Digitalmars-d-learn mailing list