Recursive Templates

Koroskin Denis 2korden at gmail.com
Sat Aug 9 11:00:25 PDT 2008


On Sat, 09 Aug 2008 21:40:24 +0400, llee <llee at goucher.edu> wrote:

> I'm working on a set library that uses templates. The library centers  
> around a class named Set. This class contains an array named elems that  
> stores the set's elements. The definition for set is as follows:
>
>      class Set (T) { ... T[] elems; ... }
>
> To calculate the cartesian product of two sets, I need to be able to  
> represent higher order sets. I tried defining a function with the  
> following signiture:
>
>      static Set! (Set! (T)) product (Set! (T) a, Set! (T) b);
>
> Unfortunately, the dmd compiler throws an error stating that It does no  
> allow recursive elements.
>
> Does anyone know how to work around this problem?
>

Can't confirm. The following code works:

class Set (T) {
	T[] elems;
}

Set!(Set!(T)) product(T)(Set!(T) a, Set!(T) b)
{
	Set!(Set!(T)) r = null;
	// do something
	return r;
}

void main()
{
	auto t = new Set!(int);
	auto s = product(t, t);
}



More information about the Digitalmars-d mailing list