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