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> 