2016-08-10 3 views
1

Ist es möglich, den Wert der Klasse/struct/andere Variablen während der Laufzeit in dlang zu bekommen, um seinen Wert zu erhalten/setzen? Wenn ja, wie soll das gemacht werden? Und ist es auch möglich, den Wert der Laufzeitvariablen zu erhalten?Die Variablenwerte zur Laufzeit über Reflektion in Dlang beziehen

Ex:

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

Ausgang:

Wert von svariable = 5;
Wert von bvariable = 10;

+0

Es gab einige Diskussion über [std.reflection] (http gewesen: // Forum .dlang.org/post/rxrlggihbstxriswwnp @ forum.dlang.org) vor ein paar Jahren. – greenify

+1

Ja, ich bin durch diesen Thread gegangen, aber nichts verfügbar als Bibliothek. Beim googlen stoße ich nur auf die gleiche Antwort von @mitch_. –

Antwort

4

Es gibt eine Bibliothek namens witchcraft, die eine Laufzeitreflexion ermöglicht. Es gibt Beispiele, wie man es auf dieser Seite benutzt.

1

Ich würde zuerst empfehlen, eine Reflexion Bibliothek wie @mitch_ erwähnt. Wenn Sie jedoch ohne eine externe Bibliothek tun möchten, können Sie getMember benutzen Sie und setzen Felder sowie invoke Funktionen:

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

Eigentlich ist dies für die Kompilierungsreflexion und Sie haben nach Laufzeit gefragt. Also ja, benutze Hexerei. – rcorre

Verwandte Themen