Enum arguments?
bearophile
bearophileHUGS at lycos.com
Sun Apr 4 13:40:33 PDT 2010
Sorry for pulling out this old thread again, I have one thing to add.
> void convolve(const float[][] mat, enum float[][] mask, float[][] outmat);
A possible variant of "enum" arguments is "auto enum" arguments. If the given value is a compile-time constant then the function becomes a template as before. Otherwise if the given value is a run-time value, then the argument is a normal function argument. So this code:
void foo(int a, auto enum int b) {}
void main() {
int x = 10;
enum int y = 10;
foo(x, y);
int z = 10;
foo(x, z);
}
is syntax sugar for:
void foo_t(int b)(int a) {}
void foo(int a, int b) {}
void main() {
int x = 10;
enum int y = 10;
foo_t!(y)(x);
int z = 10;
foo(x, z);
}
This allows for a cheap form of partial compilation :-)
It's "cheap" for the compiler because it's the programmer that tells the compiler on what it can partially compile, so the compiler doesn't need to be smart to guess as in a true partial compilation implementation.
In many situations I think this can be enough.
Bye,
bearophile
More information about the Digitalmars-d
mailing list