2013-08-31 28 views
2

說我有一類使用CTFE到生成結構的別名設置

struct Vector (ElementType, uint Dimension) { ... } 

表示與這些速記

alias Vector!(float, 2) vec2; 
alias Vector!(float, 3) vec3; 
alias Vector!(float, 4) vec4; 
alias Vector!(double, 2) vec2d; 
alias Vector!(double, 3) vec3d; 
alias Vector!(double, 4) vec4d; 
alias Vector!(int, 2) vec2i; 
alias Vector!(int, 3) vec3i; 
alias Vector!(int, 4) vec4i; 

可予以某種方式使用D的功能,以生成這些別名沿着固定維向量在編譯時?

還是隻是爲了評估功能?

/根據

回答

4

您可以隨時以混合形式進行操作。

string makeAliases() { 
    string code; 
    import std.conv; 

    foreach(type; ["float", "double", "int"]) 
    foreach(n; 2 .. 5) 
     code ~= "alias Vector!("~type~", " ~ to!string(n) ~ ") vec" ~ to!string(n) ~ type[0] ~ ";\n"; 

    return code; 
} 

mixin(makeAliases()); 

一般來說,如果你作出這樣的構建一串代碼編譯時求值的功能,然後你可以混入(thatFunction(參數...));在某個時刻,並使其發生。

調試函數時,您可以在運行時運行它並寫入(thatFunction())以查看它生成的代碼。

+0

太棒了!謝謝。 –