Hi. I'm trying to parse an simple string expression to something like Element array. Each Element can have a value of unknown type, which will be further combined and calculated to let say real/double/float value, no mather.

In Java i had something like generics and this could be implemented like:

class Element<T> {
    T value;

    Element(T value){
    this.value=value;
    }

}

class Parser{

Collection<Element<?>> parse(String expression){

    Collection<Element<?>> retVal = new ArrayList<>();
//"expression" would be parser but for this example lets say we just create new elements
    Element<Integer> e1= new Element<>();
    e1.value=3;
    Element<String> e2 = new Element<>();
    e2.value="+"
    retValue.add(e1);
    retValue.add(e2);
    ...

    return retValue;
    }

}

And then in other class not connected through module or template parameter or anything i could call it just:

Parser p = new Parser();
Collection<Element<?>>  elements=p.parse("(1+2+3)/6");

and then check weather (element.value instanceof Operator) or other stuff.

if i do something like this in D:

module calculator;
class Element(T) {
        T value;

        this(T value){
                this.value=value;
        }

}

and then:

        Element[] parse(string expression){
            Element[] returnSlice;
            ...
//"expression" would be parser but for this example lets say we just create new elements
            Element!(int) e1 = new Element();
            e1.value=3;
            Element!(string) e2= new Element();
            e2.value="+";
            returnSlice~=e1;
            returnSlice~=e2;
            return returnSlice;
        }
I'm getting error:
class calculator.Element used as a type.

How to represent this class template parameter T of Element(T) as wildcard Element(?) ??

Cheers Voitech







Reply via email to