On Saturday, 23 March 2013 at 12:12:30 UTC, Philippe Sigaud wrote:
On Sat, Mar 23, 2013 at 12:57 PM, Martin
<[email protected]> wrote:
On Saturday, 23 March 2013 at 11:55:37 UTC, Andrej Mitrovic
wrote:
On Saturday, 23 March 2013 at 10:46:11 UTC, Martin wrote:
enum allMembers = __traits(allMembers, T);
Try:
enum allMembers = [__traits(allMembers, T)];
That actually works, thanks. I thought tuples were supposed be
indexable
though
They are, I think it's a bug.
If the alias grammar was more open, we could do:
alias allMembers = __traits(allMembers, T);
but since __traits are not accepted as an alias target, we must
use a
wrapping template as a workaround:
import std.stdio;
struct TestStruct
{
int a;
int b;
int c;
}
/// Just to hide __traits:
template Alias(aliases...)
{
alias Alias = aliases;
}
template getSomeMember(T)
{
alias members = Alias!(__traits(allMembers, T));
// now members is a tuple of members
// perfectly indexable & slicable
enum getSomeMember = allMembers[0];
}
void main(string[] args)
{
enum someMember = getSomeMember!TestStruct;
writeln(typeof(someMember).stringof);
writeln(someMember);
}
I see, thanks a lot