Преобразовать строку в имя переменной или тип переменной - PullRequest
15 голосов
/ 22 августа 2011

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

makeVariable("int", "count");

или

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

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

cout << apple; //a green round object

Заранее спасибо!

Ответы [ 7 ]

18 голосов
/ 22 августа 2011

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

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

int count;

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

std::cin >> count;

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

std::vector<int> counts;

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

8 голосов
/ 22 августа 2011

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

map<string, int> numbers;
numbers["count"] = 6;
cout << numbers["count"];
5 голосов
/ 22 августа 2011

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

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

5 голосов
/ 22 августа 2011

Возможно, вы захотите взглянуть на карту C ++ .

1 голос
/ 01 августа 2012

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

1 голос
/ 22 августа 2011

Нет. C ++ имеет статическую типизацию, и это противоречит всей этой парадигме.

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

0 голосов
/ 11 июня 2012

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...