2016-08-10 38 views
1

是否可以在運行時在dlang中獲取類/結構/其他變量值以獲取/設置其值?如果是,請提供示例。 也有可能獲得運行時變量值嗎?在運行時使用Dlang中的反射獲取變量值

例:

class S{ int svariable = 5;} 
class B { int bvariable = 10;} 
void printValue(T, T instanceVariable, string variableName) { 
    writeln("Value of ", variableName, "=", instanceVariable.variableName); 
} 

輸出:

的svariable = 5的值;
bvariable的值= 10;

+0

已經有一些談論[std.reflection(HTTP://論壇.dlang.org/post/rxrlggihbstxxriswwnp @ forum.dlang.org)。 – greenify

+1

是的,我已經通過該線程,但沒有任何可用的庫。雖然谷歌搜索我剛剛遇到巫術從@mitch_相同的答案。 –

回答

4

有一個名爲witchcraft的庫允許運行時反射。有一些如何在該頁面上使用它的例子。

1

我首先建議嘗試像@mitch_提到的反射庫。但是,如果你想在沒有外部庫做,你可以使用getMember來獲取和設置字段,以及調用功能:

struct S { 
    int i; 
    int fun(int val) { return val * 2; } 
} 

unittest { 
    S s; 
    __traits(getMember, s, "i") = 5; // set a field 
    assert(__traits(getMember, s, "i") == 5); // get a field 
    assert(__traits(getMember, s, "fun")(12) == 24); // call a method 
} 
+0

實際上,這是針對編譯時反射的,並且您要求運行時。所以是的,使用巫術。 – rcorre