2014-04-15 16 views
3

應該相當簡單,但事實並非如此。使用foreach循環 - 無法讀取變量

這裏是我的代碼:

string cases() 
{ 
    string ret = ""; 
    string[] methods; 

    methods = [__traits(derivedMembers,mixin("Math"))]; 
    foreach (string s; methods) ret ~= "case \"" ~ s ~ "\": return Math."~s~"(params);"; 

    methods = [__traits(derivedMembers,mixin("OtherClass"))]; 
    foreach (string s; methods) ret ~= "case \"" ~ s ~ "\": return OtherClass."~s~"(params);"; 

    return ret; 
} 

string execute(string what, string[] params) 
{ 
    switch (what) 
    { 
     mixin(cases()); 
     default: break; 
    } 
    return ""; 
} 

我想要做什麼:

const string[] arrayWithClassNames = ["Math","SomeClass"]; 
foreach (string s; arrayWithClassNames) 
{ 
    methods = ... 
    foreach ... 
} 

很簡單吧?問題是它抱怨:

variable 's' cannot be read at compile time. 

任何想法?

回答

5

要創建編譯時循環,您需要遍歷一個元組。試試這個:

alias classNames = TypeTuple!("Math","SomeClass"); 
foreach (string s; classNames) 
{ 
    ... 
} 
+0

A-M-A-Z-I-N-G!非常感謝! :-) –