Function name
Adam D. Ruppe
destructionator at gmail.com
Thu Apr 22 17:14:38 PDT 2010
On Thu, Apr 22, 2010 at 07:48:31PM -0400, bearophile wrote:
> The third solution is what I'd like to be able to write.
How about this?
===
import std.stdio;
import std.traits;
int add(int a, int b) { return a+b; }
int mul(int a, int b) { return a*b; }
auto funcwithName(T...)() {
typeof(&T[0])[string] ret;
foreach(t; T)
ret[__traits(identifier, t)] = &t;
return ret;
}
void main() {
foreach(name, func; funcwithName!(add, mul)) {
writefln("%s %d", name, func(10,20));
}
}
===
$ ./funname
mul 200
add 30
All the functions have to be the same type to loop over them like this, and
it might not work with zero argument functions.
> This can inflate the binary a little. This is not too much different from the data classes have, like their name that can be found with classinfo.
Btw, do we still need classinfo now that we have __traits?
--
Adam D. Ruppe
http://arsdnet.net
More information about the Digitalmars-d
mailing list