Enum arguments?

bearophile bearophileHUGS at lycos.com
Wed Mar 31 04:28:05 PDT 2010


Max Samukha:

>Actually, they are allowed via an additional alias:<

This doesn't compile:


void convolve(float[N][M] mask, N, M)(float[][] a, float[][] b) {
    //...
}
void main() {
    float[][] outmat = [[0.0]];
    enum float[1][2] mask = [[1.0],[1.0]];
    convolve!mask([[1.0, 1.0]], outmat);
}


You have to use an alias plus static asserts:

void convolve(alias mask)(float[][] a, float[][] b) {
    static assert(__traits(isStaticArray, typeof(mask)));
    static assert(__traits(isStaticArray, typeof(mask[0])));
    //...
}
void main() {
    float[][] outmat = [[0.0]];
    enum float[1][2] mask = [[1.0],[1.0]];
    convolve!mask([[1.0, 1.0]], outmat);
}


While with an array of dchar (4 bytes each) compiles:

void foo(immutable(dchar)[] s)() {}
void main() {
    immutable(dchar)[] s1 = "Hello"d;
    foo!(s1)();
}


So I'd like arrays too to be allowd as template parameters.

(The other thing I've asked in that post (the enum argument type for functions) I've seen is similar to the "static" arguments in the "The future of D", that I think was tried and abandoned because too much hard to implement. So it's probably an useless request, sorry.)

Bye,
bearophile



More information about the Digitalmars-d mailing list