Страница 1 из 1
Динамическое создание имени переменной
Добавлено: 04 ноя 2007, 13:24
SerjVarshavskiy
День добрый.
например в perl есть возможность получить данные переменной,
имя которой находится в другой переменной (string)
perl:
$testVar = "YES!\n";
$strVarName = "testVar";
print "$$strVarName"; # YES!
подскажите, как подобное реализовать в Qt/C++ ?
Re: Динамическое создание имени переменной
Добавлено: 23 ноя 2007, 11:28
Romeo
На С++ такого сделать нельзя по той причине, что информация об именах после сборки в релизе выполняемой программе просто отсутствует. Перл это позволяет по той причине, что это скриптовый язык, не предусматривающий компиляции в полном смысле этого слова.
Re: Динамическое создание имени переменной
Добавлено: 11 дек 2007, 14:52
Фоб
Правильно пишет Romeo.
Разве что добавлю, что с помощью макросов можно создать иллюзию динамического создания переменных.
Макросы в С++ - это вроде как функции, которые работают на этапе компиляции, формируя часть кода.
Например:
Код: Выделить всё
#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);
На этапе компиляции вместо строк defarr(), появляется код создания массивов int m1[5], int m2[10], int m3[15], и заполнения их нулями.
А чтобы на этапе исполнения "получать данные переменной, имя которой находится в другой переменной", используйте указатели, и сможете "получать данные, адрес которых находится по другому адресу" (то же самое, но в терминах системного программирования).
Re: Динамическое создание имени переменной
Добавлено: 11 дек 2007, 16:05
WinMain
На С++ можно сделать обращение к переменной по её строковому имени, если для этого использовать ассоциативные контейнеры, например std::map<>. Тогда в качестве ключевого параметра нужно указать класс строки, а хранимое значение будет того типа, который нас интересует, например:
std::map<std::string, int> _map;
_map["first"] = 1;
_map["second"] = _map["first"] + 1;