tuple parameter fwd

Ali Çehreli acehreli at yahoo.com
Mon Aug 5 22:07:51 PDT 2013


On 08/05/2013 09:51 PM, kdmult wrote:
> On Monday, 5 August 2013 at 18:45:49 UTC, kdmult wrote:
>> class A(P...) {}
>>
>> class B(R = A!P, P...) {}
>>
>> P... should be rightmost, so how can I use it in the preceding parameter?
>
> The default parameter value doesn't make sense as it's shown above.
> Actually I want to port C++ code which looks like below.
>
> template <typename P1>
> class A1 {};
> template <typename P1, typename R=A1<P1> >
> class B1 {}
>
> template <typename P1, typename P2>
> class A2 {};
> template <typename P1, typename P2, typename R=A2<P1,P2> >
> class B2 {}
>
> and so on.
>
> I would use the variadic template parameters. However, I have no idea
> how it can be done. Please advise.
>
> Thanks.

Direct translation seems to work:

class A1(P1) {}
class B1(P1, R = A1!P1) {}

class A2(P1, P2) {}
class B2(P1, P2, R = A2!(P1, P2)) {}

void main()
{
     auto a1 = new A1!int;
     auto b1d = new B1!int;
     auto b1 = new B1!(int, A1!double);
     auto a2 = new A2!(int, double);
     auto b2d = new B2!(int, double);
     auto b2 = new B2!(int, double, A2!(char, short));
}

Ali



More information about the Digitalmars-d-learn mailing list