digitalmars.D.learn - Trouble initializing a templated class
- quakkels (27/27) Jul 05 2014 I'm going through Adam Wilson's talk 'C# to D' and I've gotten
- quakkels (3/7) Jul 05 2014 This is actually:
- Vlad Levenfeld (2/29) Jul 05 2014 try SomeClass (T): BaseClass
- quakkels (6/7) Jul 05 2014 Not sure which line you want me to change. I don't want SomeClass
- Vlad Levenfeld (9/16) Jul 05 2014 ah, sorry, I misunderstood. It looks like you need to change the
- quakkels (19/27) Jul 05 2014 Thanks. That did it.
hung up by one of his examples regarding generic programming in 
D. Specifically, I'm trying to implement the code example found 
here: http://youtu.be/6_xdfSVRrKo?t=16m44s.
I created a templateExp.d file that looks like this:
	public class BaseClass {}
	public class OtherClass : BaseClass {}
	class SomeClass(T : BaseClass)
	{
		public T[] values;
		public void add(T input) { values ~= input; }
	}
	void main()
	{
		auto sc = new SomeClass();
		OtherClass oc1 = new OtherClass();
		OtherClass oc2 = new OtherClass();
		sc.add(oc1);
		sc.add(oc2);
		import std.stdio;
		writefln("value count", sc.values.length);
	}
When I run the dmd compiler, I get this error:
	>dmd templateExp.d
	teamplteExp.d(12): Error: class teamplteExp.SomeClass(T : 
BaseClass) is used as a type
How can I initialize this class correctly?
 Jul 05 2014
When I run the dmd compiler, I get this error: >dmd templateExp.d teamplteExp.d(12): Error: class teamplteExp.SomeClass(T : BaseClass) is used as a typeThis is actually: templateExp.d(12): Error: class templateExp.SomeClass(T : BaseClass) is used as a type
 Jul 05 2014
On Saturday, 5 July 2014 at 16:47:32 UTC, quakkels wrote:
 hung up by one of his examples regarding generic programming in 
 D. Specifically, I'm trying to implement the code example found 
 here: http://youtu.be/6_xdfSVRrKo?t=16m44s.
 I created a templateExp.d file that looks like this:
 	public class BaseClass {}
 	public class OtherClass : BaseClass {}
 	class SomeClass(T : BaseClass)
 	{
 		public T[] values;
 		public void add(T input) { values ~= input; }
 	}
 	void main()
 	{
 		auto sc = new SomeClass();
 		OtherClass oc1 = new OtherClass();
 		OtherClass oc2 = new OtherClass();
 		sc.add(oc1);
 		sc.add(oc2);
 		import std.stdio;
 		writefln("value count", sc.values.length);
 	}
 When I run the dmd compiler, I get this error:
 	>dmd templateExp.d
 	teamplteExp.d(12): Error: class teamplteExp.SomeClass(T : 
 BaseClass) is used as a type
 How can I initialize this class correctly?
try SomeClass (T): BaseClass
 Jul 05 2014
try SomeClass (T): BaseClassNot sure which line you want me to change. I don't want SomeClass to inherit from BaseClass. Rather, I want T to be restricted to classes that inherit from BaseClass. When I change `class SomeClass(T : BaseClass)` to `class SomeClass(T) : BaseClass` I still get the "class templateExp.SomeClass(T) is used as a type" error.
 Jul 05 2014
On Saturday, 5 July 2014 at 17:17:03 UTC, quakkels wrote:ah, sorry, I misunderstood. It looks like you need to change the lin auto sc = new SomeClass (); to auto sc = new SomeClass!BaseClass (); The compiler complains because SomeClass is a template when you call SomeClass() without !() template parameters. It only becomes a type once instantiated with parameters.try SomeClass (T): BaseClassNot sure which line you want me to change. I don't want SomeClass to inherit from BaseClass. Rather, I want T to be restricted to classes that inherit from BaseClass. When I change `class SomeClass(T : BaseClass)` to `class SomeClass(T) : BaseClass` I still get the "class templateExp.SomeClass(T) is used as a type" error.
 Jul 05 2014
ah, sorry, I misunderstood. It looks like you need to change the lin auto sc = new SomeClass (); to auto sc = new SomeClass!BaseClass (); The compiler complains because SomeClass is a template when you call SomeClass() without !() template parameters. It only becomes a type once instantiated with parameters.Thanks. That did it. Here's my working program. public class BaseClass {} public class OtherClass : BaseClass {} class SomeClass(T : BaseClass) { public T[] values; public void add(T input) { values ~= input; } } void main() { auto sc = new SomeClass!BaseClass(); OtherClass oc1 = new OtherClass(); OtherClass oc2 = new OtherClass(); sc.add(oc1); sc.add(oc2); import std.stdio; writefln("value count: %d", sc.values.length); }
 Jul 05 2014








 
  
  
 
 "quakkels" <_ example.com>
 "quakkels" <_ example.com> 