День добрый.
например в perl есть возможность получить данные переменной,
имя которой находится в другой переменной (string)
perl:
$testVar = "YES!\n";
$strVarName = "testVar";
print "$$strVarName"; # YES!
подскажите, как подобное реализовать в Qt/C++ ?
Динамическое создание имени переменной
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
- Romeo
- Сообщения: 3091
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
На С++ такого сделать нельзя по той причине, что информация об именах после сборки в релизе выполняемой программе просто отсутствует. Перл это позволяет по той причине, что это скриптовый язык, не предусматривающий компиляции в полном смысле этого слова.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Правильно пишет Romeo.
Разве что добавлю, что с помощью макросов можно создать иллюзию динамического создания переменных.
Макросы в С++ - это вроде как функции, которые работают на этапе компиляции, формируя часть кода.
Например:
На этапе компиляции вместо строк defarr(), появляется код создания массивов int m1[5], int m2[10], int m3[15], и заполнения их нулями.
А чтобы на этапе исполнения "получать данные переменной, имя которой находится в другой переменной", используйте указатели, и сможете "получать данные, адрес которых находится по другому адресу" (то же самое, но в терминах системного программирования).
Разве что добавлю, что с помощью макросов можно создать иллюзию динамического создания переменных.
Макросы в С++ - это вроде как функции, которые работают на этапе компиляции, формируя часть кода.
Например:
Код: Выделить всё
#define defarr(t, name, j, n, v) t* name ## j = new t[n * j]; for (int i = 0; i < n * j; i++) (name ## j)[i] = v;
defarr(int, m, 1, 5, 0);
defarr(int, m, 2, 5, 0);
defarr(int, m, 3, 5, 0);
А чтобы на этапе исполнения "получать данные переменной, имя которой находится в другой переменной", используйте указатели, и сможете "получать данные, адрес которых находится по другому адресу" (то же самое, но в терминах системного программирования).
На С++ можно сделать обращение к переменной по её строковому имени, если для этого использовать ассоциативные контейнеры, например std::map<>. Тогда в качестве ключевого параметра нужно указать класс строки, а хранимое значение будет того типа, который нас интересует, например:
std::map<std::string, int> _map;
_map["first"] = 1;
_map["second"] = _map["first"] + 1;
std::map<std::string, int> _map;
_map["first"] = 1;
_map["second"] = _map["first"] + 1;