2010-11-22 4 views
0

В вену более невозможными, но-это-это-действительно вопросы:Доступ к переменной-члена класса по имени во время выполнения

Можно ли получить доступ к переменной-члена класса, где имя переменной является хранится в строке?

class Test 
{ 
public: 
int test = 0; 
} 
string name = "test"; // let's assume we know test is an int. 

Любой шанс получить значение теста, используя строку? не

Один бит списывания не допускается:

enum vartype { 
INT, 
.. 
} 

Нет принуждая класс регистрировать все свои переменные в std::map<string, std::pair<vartype, void*> >.

Все остальные трюки приветствуются.

Спасибо!

+1

Можете ли вы объяснить, почему вы считаете нужным? – ruslik

+0

@ruslik: Не знаю. Мне было просто любопытно. –

ответ

4

No.

Для этого вам необходимо предоставить некоторое отображение между переменными членами и строковые имена, по которым вы собираетесь получить к ним доступ.

+0

Я бы также добавил: имена переменных + функций просто ** не существуют ** в окончательном исполняемом файле – valdo

2

В сфере действительно уродливых клоунов вы можете создать программу с отладочной информацией и использовать ее для поиска местоположения переменной так же, как и отладчик. Но кроме этого вам не повезло. C++ не делает отражения.

0

О том, почему он не доступен в C++ и альтернатива:http://en.allexperts.com/q/C-1040/eval-function-javascript-C.htm

Это возможно в MATLAB, хотя ... В качестве простого примера, если у вас есть матрица Updation делать, который идет как:

M1=1; 
M2=2; 
M3=3; 

И вы предпочли бы, что имена переменных могут быть изменены таким образом, чтобы вы могли использовать для цикла, то он также может быть сделано таким образом:

for i=1:3 
eval(['M' num2str(i) '=' num2str(i)]); 
end 

Я использовал это в ActionScript. Был действительно рад найти, что он доступен в Matlab слишком

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