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