在D中,模板實例化在mixin出現的範圍內進行計算,而不是在定義模板聲明的位置。在mixin出現的範圍內,可以使用模板mixin來評估身體。 但是我有什麼可以做的時候我有一個模板函數,我希望它的主體在調用範圍內進行評估?我無法找到一種方式將其翻譯成相當的東西。D中的模板實例化理解模板,模板混合模板,模板函數和範圍
讓我們有兩個模塊,module1
和module2
下面的例子:
module module1;
import std.stdio;
public void test(string field)(string msg)
{
mixin("static if (__traits(isArithmetic, " ~ field ~ ")) \n"
~ " writeln(msg);\n");
}
和
module module2;
import module1;
struct Foo
{
int x;
float y;
};
void main()
{
module1.test!("Foo.x")("ok");
}
嘗試進行編譯與失敗,錯誤undefined identifier Foo.x
,因爲foo是不是裏面模塊1可見。有沒有一種方法可以用模塊參數在模塊2中而不是模塊1中進行評估的方式進行重寫。 如果這是不可能的,有沒有辦法獲得一個代表「Foo.x」的對象並將其作爲模板參數傳遞? (這不會解決一般情況,但至少會有用)。
是的,這似乎正是我一直在尋找。我來到了類似的解決方案,使用類的模板參數,並保持字段的字符串,但是好得多。謝謝。 –