3
D2.056D編譯時函數類型提取
函數是一個包含名稱和函數類型(分別爲Name和Type)的結構。綁定迭代函數結構列表並返回一個mixin字符串。這個mixin爲每個函數定義了一個新名字,並附加了'2'。
void f() { writeln("f"); }
void g() { writeln("g"); }
struct Function(string name, Prototype)
{
const string Name = name;
mixin("alias Prototype Type;");
}
string Binds(Functions...)()
{
string r;
foreach (F; Functions)
{
// error:
r ~= to!string(typeid(F.Type)) ~ " " ~ F.Name ~ "2 = &" ~ F.Name ~ ";";
}
return r;
}
int main()
{
mixin (Binds!(
Function!("f", void function()),
Function!("g", void function())
));
f();
//f2();
return 0;
}
編譯時,該to!string(typeid(F.Type))
給出了一個錯誤:
Error: Cannot interpret & D13TypeInfo_PFZv6__initZ at compile time
called from here: to(& D13TypeInfo_PFZv6__initZ)
called from here: Binds()
首先,我不明白爲什麼需要顯式地轉換爲字符串(尚未typeid的一個字符串,如果沒有, typeid和typeof有什麼區別?)。
其次,我不知道如何獲得顯式函數類型寫出來,以便它可以在主要執行。我不能使用F.Type,因爲它是本地的foreach。