Преобразование строки в имя переменной или тип переменной

Можно ли преобразовать строки в переменные (и наоборот), сделав что-то вроде:

makeVariable("int", "count");

или

string fruit;
cin >> fruit;    // user inputs "apple"
makeVariable(fruit, "a green round object");

а затем получить доступ к нему, выполнив что-то вроде:

cout << apple; //a green round object

Спасибо заранее!

Ответ 1

Нет, это невозможно. Подобная функциональность распространена на языках сценариев, таких как Ruby и Python, но С++ работает совсем по-другому. В С++ мы стараемся выполнять как можно большую часть работы программы время компиляции. Иногда мы можем делать что-то в runtime, и даже тогда хорошие программисты на C++ найдут способ выполнить эту работу уже в момент компиляции.

Если вы знаете, что собираетесь создать переменную, создайте ее сразу:

int count;

То, что вы, возможно, не знаете заранее, это значение переменной, поэтому вы можете отложить это для времени выполнения:

std::cin >> count;

Если вы знаете, что вам понадобится коллекция переменных, но не точно, сколько из них затем создаст map или vector:

std::vector<int> counts;

Помните, что имя переменной - это не что иное, как имя - способ позже обратиться к переменной. В С++ он невозможен, но не полезно отложить присвоение имени переменной во время выполнения. Все, что вам нужно сделать, это сделать ваш код более сложным, а ваша программа медленнее.

Ответ 2

Возможно, вы захотите посмотреть карту С++.

Ответ 3

Вы можете использовать карту.

map<string, int> numbers;
numbers["count"] = 6;
cout << numbers["count"];

Ответ 4

Начальные программисты задают этот вопрос относительно каждого языка. Есть группа компьютерных языков, для которых ответ на этот вопрос "да". Это динамические интерактивные языки, такие как BASIC, Lisp, Ruby, Python. Но подумайте: переменные имена существуют только в коде, для удобства программиста. Имеет смысл только определить новую переменную во время работы программы, если есть человек, который затем будет вводить имя переменной в новый код. Это верно для интерактивной языковой среды, а не для компилируемых языков, таких как С++ или Java. В С++, к моменту запуска программы и создания мнимой новой переменной, никто не будет писать код, который будет использовать эту новую переменную.

Вместо этого вам нужна возможность связать имя с объектом во время выполнения, чтобы код, а не люди, мог использовать это имя для поиска объекта. Как уже отмечали другие люди, функция map стандартной библиотеки С++ дает вам эту возможность.

Ответ 5

Нет. С++ статически типизирован, и это противоречит всей этой парадигме.

Я видел этот тип функциональности, реализованный ранее, сохраняя переменные на stl-карте.

Ответ 6

По крайней мере, для (наоборот) есть возможность с инструкцией препроцессора stringify #. См. этот ответ о том, как преобразовать имя переменной С++ в строку.

Ответ 7

ну, я думаю, вы не можете делать переменные динамики, но вы можете использовать некоторую функцию для записи новой переменной и ее значения в любом внешнем текстовом файле и получить доступ к ее значению из этого файла, где бы он ни понадобился (u также может удалить динамическую переменную удалив его из текстового файла.)

Теория

: переменные - это места в памяти, где мы храним данные, идентифицированные по имени, мы можем хранить данные в текстовом файле, если процессор не позволяет хранить его в регистрах, и мы можем получить доступ к его значению, выполнив поиск его идентификатора ( имя переменной) int текстовый файл, наши данные будут рядом с ним.

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