Use class template as a type
Nicholas Wilson via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Mon Nov 28 05:07:56 PST 2016
On Monday, 28 November 2016 at 11:26:41 UTC, dm wrote:
> Hi.
> Is it possible to write in D something like this?
>
> ```
> abstract class MyClass(T)
> {
> public:
> @property const(T) value(){return _value;}
> @property void value(T val){_value = val;}
> ...
> private:
> T _value;
> ...
> }
> ...
> class MyClassFloat: MyClass!float
> ...
>
> class MyClassInt: MyClass!int
> ...
>
> void main()
> {
> MyClass[] someArray;
---^
> someArray ~= new MyClassFloat();
> ...
>
> someArray ~= new MyClassInt();
> ...
>
> foreach(myClass; someArray)
> if(typeid(myClass) == typeid(MyClassInt))
> myClass.value = 999;
> else
> myClass.value = 123.45f;
> ...
>
> }
> ```
> When I trying to compile code like above I got
> Error: class MyClass(T) is used as a type.
Thats because MyClass is a template class. Templates are note
types, instansiations of templates can be types.
e.g.
Myclass!float[] arr; // note this is not MyClass!(float[]);
will work. As Rikki suggested using Object[] instead will allow
use to store classes of different types.
More information about the Digitalmars-d-learn
mailing list