So I just started learning D this weekend, and I'm trying to understand why the following example will not work... Essentially what I am trying to do is cast the templated child stored in the parent container as the correct form, return some T value, and use auto to return the correct value type.. It seems from the errors I get regarding mismatched return type inference of string and double, that the compiler, for whatever reason, is assuming auto is a double?

int main(string[] argv)
{
        Parent[] Array;
        Array ~= new Child!(double)(3.0);
        Array ~= new Child!(string)("text");
        foreach(item;Array)
        {
                auto val = value(item,item.type);
                //writeln(std.conv.to!string(value(item,item.type)));
        }
return 0;
}
auto value(Parent item, int type)
{
        if(item.type == 1)
        {
                return Fun!double(cast(Child!double)item);
        }
        else if(item.type==2)
                return Fun!string(cast(Child!string)item);
        else
                return 0;
}
auto Fun(T)(Child!T c)
{
        return c.Value;
}

public class Parent
{
        int type=-1;
}
public class Child(T) : Parent
{
        T value;
        public this(T value)
        {
                this.value=value;
                SetType();
        }
        private void SetType()
        {
                if(typeid(T) == typeid(int))
                        type=0;
                if(typeid(T) == typeid(double))
                        type=1;
                if(typeid(T) == typeid(string))
                        type=2;
        }
        @property public T  Value(){return value;}
}

Reply via email to