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

Да, я прошел через эту нить, но ничего не было в библиотеке. В то время как googling я просто сталкивался с колдовством того же ответа от @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

Смежные вопросы