Template tuple parameters of classes
tsalm
tsalm at free.fr
Sat Aug 2 02:20:40 PDT 2008
Le Fri, 01 Aug 2008 09:52:46 +0200, ws <wisiong at gmail.com> a écrit:
> 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);
> }
>
It work.
thanks !
Another question in the same sense : is there a way to do this :
( the aim is to work with the type (T) of the instance of MyClass )
/* --------------------------------------- */
import tango.io.Stdout;
class MyClass(T)
{}
template Print(U: MyClass!(T),T ...)
{
void Print()
{
static if (U.length >= 1)
{
Stdout(T[0].sizeof);
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