Array/collection of templated class

BCS BCS_member at pathlink.com
Thu Apr 20 09:14:58 PDT 2006


Might this work?

abstract class Foo
{
	abstract TypeInfo TypeOf();
}

class FooT (T) : Foo
{
	public this (T a_value) { p_value = a_value; }

	public T value () { return p_value; }

	TypeInfo TypeOf() { return typeid(T); }

	private T p_value;
}

void main ()
{
	Foo[] arr = new Foo[3];

	arr[0] = new FooT!(int)(123);
	arr[1] = new FooT!(char[])("hello world");
	arr[2] = new FooT!(Object)(arr[0]);
}


Chris Nicholson-Sauls wrote:
> I'm working on a project of mine, and I came across this little 
> problem.  Now, it may well be that the solution is staring me in the 
> face, but I just can't seem to come up with a feasible solution to this: 
> I can't have an array of a templated class.
> 
> To illustrate:
> 
> ########## foo.d
> # class Foo (T) {
> #   public this (T a_value) { p_value = a_value; }
> #
> #   public T value () { return p_value; }
> #   private T p_value;
> # }
> #
> # void main () {
> #   Foo[] arr;
> # }
> 
> This will give the error:
> foo.d(9): class foo.Foo(T) is used as a type
> 
> Now, granted, I expected this.  But I'm at a loss as to what to do.  
> Sure, if I had a way of knowing the signatures of the template instances 
> I could just use "Object[]" decleration and a cast() expression on the 
> lookup, but this is for a system where I usually won't know.
> 
> Ideas?
> 
> -- Chris Nicholson-Sauls



More information about the Digitalmars-d mailing list