Is it possible to store different generic types in ex. an

Ali Çehreli via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Nov 9 07:56:14 PST 2016


On 11/09/2016 07:44 AM, Is it possible to store different generic types? 
wrote:
> Is it possible to store different generic types in ex. somekind of
> container such as an array, hashtable etc.
>
> Let's say we got
>
> class Foo(T) {
>     ...
> }
>
> Would it be possible to store something like
>
> Foo[] foos; // Where Foo of course should allow any generic version of Foo
>
> Ex.
>
> Foo!int and Foo!string should both be able to be stored inside the array.
>
> If so how would one construct an array like that or is there some other
> container that may be able to do it?
>
>

The classic way of doing it is inheriting from an interface. Usually 
there is no casting needed:

import std.stdio;
import std.algorithm;

interface Foo {
     void foo();
}

class SimpleFoo(T) : Foo {
     void foo() {
         writefln("foo'ing for %s", T.stringof);
     }
}

void main() {
     Foo[] foos;
     foos ~= new SimpleFoo!int();
     foos ~= new SimpleFoo!double();
     foos.each!(f => f.foo());
}

Ali



More information about the Digitalmars-d-learn mailing list