[phobos] More tuple algorithms with std.meta
Robert Jacques
sandford at jhu.edu
Tue Sep 28 07:52:23 PDT 2010
On Tue, 28 Sep 2010 06:10:56 -0400, Shin Fujishiro <rsinfu at gmail.com>
wrote:
> "Robert Jacques" <sandford at jhu.edu> wrote:
>> The meta namespace has been proposed as a possible replacement for
>> __traits, etc. i.e. meta.compiles() vs __traits(compiles, ). So a
>> different module name might be appropriate.
>
> I'll consider. BTW, will this really happen, or rather is it necessary?
> IIRC, the proposal was against the ugly syntax. I think all the
> existing __traits except compiles could be wrapped with library
> templates with syntactic sanity and added flexibility. For example:
>
>
> template getMember(alias Scope, string member)
> {
> alias Identity!(__traits(getMember, Scope, member)) getMember;
> }
>
> // This overload does partial application. Useful for staticMap etc.
> template getMember(alias Scope)
> {
> template getMember(string member)
> {
> alias .getMember!(Scope, member) getMember;
> }
> }
>
>
> Shin
I don't know if this is on the road map or not, I just remember a decently
serious discussion about it. I do like your solution, although some
__traits would require tuples of aliases and for aliases to support types
in addition to expressions. Since we'd hopefully be able to do both some
time in the future, no reason not to start a limited form of it now. Also,
since things like getMember are fairly generic for the public namespace,
they should probably be put into a holding struct (e.g. meta). This could
also apply to your staticMap, staticReduce, etc. (i.e. meta.map and
meta.reduce). This has the advantage of using with(meta){ } when large
blocks of metaprogramming are written.
More information about the phobos
mailing list