Thread overview | |||||
---|---|---|---|---|---|
|
July 23, 2013 Using alias parameters with class members in CTFE (related to UDAs) | ||||
---|---|---|---|---|
| ||||
Does anyone know why this code is not working? http://dpaste.dzfl.pl/b89e7b3f It seems calling "enum a = __traits(getAttributes, Class.member);" is OK without an instance. But if I wrap the __traits call into another template with alias parameter like this: ----------- auto getAttribute(alias target)() { return __traits(getAttributes, target)[0]; } ----------- I can no longer call it at compile time ("enum b = getAttribute!(Class.member)"). What I want to do ultimately is assigning special values to all class members which have a specific UDA while avoiding runtime overhead as much as possible. In pseudo code: ------------ instance i1; static foreach member in i1 static if i1.hasUDA(UdaType) member = specialValue(); ------------ Should compile down to only this: instance i1; i1.member1 = specialValue(); i1.member2 = specialValue(); i1.member3 = specialValue(); |
July 24, 2013 Re: Using alias parameters with class members in CTFE (related to UDAs) | ||||
---|---|---|---|---|
| ||||
Posted in reply to Johannes Pfau | On 7/23/13, Johannes Pfau <nospam@example.com> wrote:
> Does anyone know why this code is not working? http://dpaste.dzfl.pl/b89e7b3f
Add 'static' to getAttribute and it will work. I know, it's weird, and I've seen this sort of workaround used before. I think it's a compiler bug.
|
July 24, 2013 Re: Using alias parameters with class members in CTFE (related to UDAs) | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrej Mitrovic | Am Wed, 24 Jul 2013 02:13:50 +0200
schrieb Andrej Mitrovic <andrej.mitrovich@gmail.com>:
> On 7/23/13, Johannes Pfau <nospam@example.com> wrote:
> > Does anyone know why this code is not working? http://dpaste.dzfl.pl/b89e7b3f
>
> Add 'static' to getAttribute and it will work. I know, it's weird, and I've seen this sort of workaround used before. I think it's a compiler bug.
Thanks! I already feared I'd have to use some string mixin tricks :-)
|
Copyright © 1999-2021 by the D Language Foundation