2016-08-10 1 views
1

dlang에서 런타임 중에 class/struct/other 변수 값을 가져 와서 값을 가져 오거나 설정할 수 있습니까? '예'라고 답한 경우 예를 들어주십시오. 또한 런타임 변수 값을 가져올 수 있습니까?Dlang에서 리플렉션을 사용하여 런타임에 변수 값 가져 오기

예 :

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

출력 : 5 = svariable의

값;
값은 bvariable = 10입니다.

+0

가 [std.reflection] (HTTP에 대한 몇 가지 이야기가 있었다 : 외부 라이브러리없이하고 싶은 경우에는, 당신은 얻을 및 설정 필드뿐만 아니라 호출 기능 getMember을 사용할 수 있습니다 // 포럼 .dlang.org/post/rxrlggihbstxxriswwnp @ forum.dlang.org) 조금 전에. – greenify

+1

예, 해당 스레드를 통과했지만 라이브러리로 사용할 수있는 것은 없습니다. 인터넷 검색하는 동안 나는 그냥 @ mitch_에서 요술 같은 대답을 발견했습니다. –

답변

4

런타임 리플렉션을 허용하는 witchcraft 라이브러리가 있습니다. 해당 페이지에서 사용하는 방법에 대한 예가 있습니다.

1

먼저 @mitch_와 같은 리플렉션 라이브러리를 사용해 보는 것이 좋습니다.

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

관련 문제