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