Array of class intances
    bearophile 
    bearophileHUGS at lycos.com
       
    Tue Apr  8 11:44:05 PDT 2008
    
    
  
BCS:
> C[] copyinst = inst.dup;
> foreach(inout i; inst) i = i.dup;
I suggest you to use ref instead of inout, I presume inout keyword will be removed.
lutger:
T[] dup(T)(T[] a)
{
    static if (is(typeof(T.dup)))
    {
        T[] result;
        result.length = a.length;
        foreach(i, val; a)
            result[i] = val.dup;
        return result;
    }
    else
        return a.dup;
}
Nice.
Something like this (untested, it may need debugging!) may be useful for nested arrays (IsArray is true for dynamic or static arrays and false in every other situation):
template DeconstArrType(T) {
    // similar to std.bind.DynamicArrayType
    static if (IsArray!(T))
        alias typeof(T[0])[] DeconstArrType;
    else
        alias T DeconstArrType;
}
DeconstArrType!(TySub)[] deepDup(TySub)(TySub[] seq) {
    static if (is(typeof(TySub.dup))) {
        auto result = new DeconstArrType!(TySub)[seq.length];
        foreach (i, sub; seq)
            result[i] = deepDup(sub);
        return result;
    } else {
        return seq.dup;
    }
}
A generic deepcopy() function that works with everything (that needs the support of a special method in Object class too) may be useful.
Bye,
bearophile
    
    
More information about the Digitalmars-d-learn
mailing list