2011-11-18 55 views
2

D2.056d編譯時變均勻陣列

void f(string[] names...) 
{ 
    foreach (name; names) 
    { 
     mixin("string " ~ name ~ " = name;"); 
    } 
} 

int main() 
{ 
    f("a", "b"); 
    return 0; 
} 

爲什麼這個不行?它抱怨'name'不是編譯時可讀的,但這是一個錯誤的陳述。 「名稱」的內容在編譯時已知,因爲它是{「a」,「b」};

我想與庫進行綁定,並且傳遞的函數名稱必須定義並指向庫。

回答

1

函數必須對編譯和編譯時執行都有效。顯然f是不可編譯的。

取決於你想要達到的目標,你既可以讓names模板參數(這將使foreach靜態),或使f建立一個字符串,並混入在f的調用點的結果。

+0

我將如何確保,與模板版本,傳遞的元組確實是同類和字符串類型兼容?因爲轉換爲模板版本時該檢查會丟失。 –