I am trying to use the following code to get a list of integral data elements from a class:
import std.stdio; import std.traits; class D { static string[] integralMembers = getIntegralMembers(); static string[] getIntegralMembers() { auto allMembers = __traits(allMembers, D); string[] tmp = new string[allMembers.length]; int ct = 0; for(int i = 0; i != allMembers.length; ++i) { bool isInteg = __traits(isIntegral, __traits(getMember, D, allMembers[i])); if(isInteg) { tmp[ct++] = allMembers[i]; } } string[] ret = new string[ct]; for(int i = 0; i != ct; ++i) { ret[i] = tmp[i]; } return ret; } int a; this() { } ~this() { } } void main() { auto integralMembers = D.integralMembers; foreach(mem; integralMembers) { writeln(mem); } }
But compilation does not work with these errors:
main.d(17): Error: variable i cannot be read at compile time main.d(17): Error: expression expected as second argument of __traits getMember main.d(19): Error: variable i cannot be read at compile time main.d(7): called from here: getIntegralMembers()
How to compile this code?
source share