On Sunday, 4 September 2016 at 09:55:53 UTC, data pulverizer wrote:
My main question is how to return GenericVector!(T) from the getCol() method in the Table class instead of BaseVector.

I think I just solved my own query, change the BaseVector interface to a class and override it in the GenericVector(T) class:

----------------------------
class BaseVector{
    BaseVector get(size_t){
        return new BaseVector;
    };
}

class GenericVector(T) : BaseVector{
    T[] data;
    alias data this;
    override GenericVector get(size_t i){
        return new GenericVector!(T)(data[i]);
    }
    this(T[] arr){
        this.data = arr;
    }
    this(T elem){
        this.data ~= elem;
    }
    void append(T[] arr){
        this.data ~= arr;
    }

    override string toString() const {
        return format("%s", data);
    }
}

class Table{
// ... as before
}

void main(){
    auto index = new GenericVector!(int)([1, 2, 3, 4, 5]);
auto numbers = new GenericVector!(double)([1.1, 2.2, 3.3, 4.4, 5.5]); auto names = new GenericVector!(string)(["one", "two", "three", "four", "five"]);
    Table df = new Table(index, numbers, names);
    // now prints table.GenericVector!int.GenericVector
    writeln(typeid(df.getCol(0)));
}

Reply via email to