Cannot dup an associative array but why?
Jean-Louis Leroy via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Wed Jul 12 06:50:29 PDT 2017
On Tuesday, 11 July 2017 at 21:23:28 UTC, Ali Çehreli wrote:
> Default template and function arguments are resolved at
> instantiation site, which means __MODULE__ would resolve
> automatically to the caller's module. For example, if you have
> this module:
__MODULE__ is a string so I cannot pass it to
__traits(allMembers). I worked around it via a string mixin that
creates an alias for the module:
template RegisterMethods()
{
import std.array;
mixin("alias MODULE = " ~ __MODULE__ ~ ";");
auto RegisterMethods() {
string[] s;
foreach (m; __traits(allMembers, MODULE)) {
// do stuff
}
return join(s, "");
}
}
mixin(RegisterMethods);
I wonder if there is a better way.
Also, I am using the outer string mixin (as opposed to a plain
mixin) because I will need to produce a series of aliases:
mixin(RegisterMethods);
// injects:
// alias add = Method!("add", Matrix, virtual!Matrix,
virtual!Matrix).dispatcher
// alias add = Method!("add", Matrix, virtual!Matrix,
virtual!Matrix).discriminator;
// alias kick = Method!("kick", Animal).dispatcher
// alias kick = Method!("kick", Animal).discriminator
// etc
The only way I can see is with a string mixin.
I thought about the new syntax since yesterday, and hit some
problems and some solutions. At this point maybe we should
continue that discussion elsewhere than the Learn forum...
More information about the Digitalmars-d-learn
mailing list