2016-08-10 56 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