On Wednesday, 30 April 2025 at 06:08:23 UTC, cc wrote:
On Friday, 25 April 2025 at 16:14:49 UTC, Andy Valencia wrote:
I have a code pattern, and would like to generate rather than copy/paste. It _seems_ like mixin templates apply, but I'm not having much luck. I saw one comment that templates always expand in their own context, so perhaps they're not useful for generating a top-level function?

I assume this is what you wanted to do (given existing functions that take a char, create overloads that take a whole string)?
```d
bool bigtest(in string s) {
    return true;
}

bool test1(in char c) {
    return false;
}
bool test2(in char c) {
    return true;
}

bool MyFunc(alias fn)(in string s) {
    if (!bigtest(s)) {
        return false;
    }
    foreach(c; s) {
        if (!fn(c)) {
            return false;
        }
    }
    return true;
}

alias test1 = MyFunc!test1;
alias test2 = MyFunc!test2;

int main() {
    if (!test1("Hello, world")) {
        return(1);
    }
    if (!test2("Hello, world")) {
        return(1);
    }
    return(0);
}
```


As a workaround, I had just used a pointer to a function argument. I assumed this--which would make the leaf function visible during compilation of the string function--would perform better. But, on 1.40.1 with x86-64, it's about twice as slow! But it does show a useful technique which I'm sure I'll use at some point.

Thanks,
Andy

Reply via email to