static foreach / iterate over all consts in a module?

Robert M. Münch robert.muench at saphirion.com
Tue Mar 5 20:34:54 UTC 2019


On 2019-03-05 12:57:15 +0000, Robert M. Münch said:

> On 2019-03-04 00:37:56 +0000, Rubn said:
> 
>> It depends on how it is stored, if it is just an enum, then yes you can 
>> do pretty much what you have already. Some example of what you have 
>> already would help as well.
>> 
>> https://run.dlang.io/is/l2jyWP
>> 
>> module thisModule;
>> 
>> enum WM_CREATE = 1;
>> enum WM_DESTROY = 2;
>> 
>> void main()
>> {
>> import std.stdio;
>> 
>> foreach(memberName ; __traits(allMembers, thisModule))
>> {
>> alias member = __traits(getMember, thisModule, memberName);
>> static if(memberName.length >= 3 && memberName[0 .. 3] == "WM_") {
>> writeln(memberName, ": ", member);
>> }
>> }
>> }
> 
> Thanks.
> 
> Trying this (I replaced thisModule by core.sys.windows.winuser 
> everywhere) I get the following errors for the line with the "writeln":
> 
> Error: unexpected ( in declarator
> Error: basic type expected, not ": "
> Error: found ": " when expecting )
> Error: no identifier for declarator writeln(memberName, _error_)
> Error: semicolon expected following function declaration
> Error: declaration expected, not ,
> 
> Wondering why the "writeln" bombs out here...


I had this CTFE loop in the global scope, I think it's related. Using 
pragma(msg, ...) works in the global scope.

-- 
Robert M. Münch
http://www.saphirion.com
smarter | better | faster



More information about the Digitalmars-d mailing list