C ++ Использование строковой переменной для вызова и присвоения имен другим вещам - PullRequest
0 голосов
/ 04 ноября 2011

Как я могу дать имя новой переменной или объекту, используя строковую переменную?

Например: после того, как я скомпилирую программу, я ввожу текст "a_name", нажимаю [Enter] и затем объявляется объект или имя с именем "a_name". Другой пример: я ввожу текст "a_name", нажимаю [Enter], а затем переменная с именем "a_name" показывает ее значение.

Существуют ли специальные библиотеки для этого, которые нужно загрузить? Или есть те, которые включены в файлы компиляторов? Если есть библиотеки, которые нужно загрузить, какие из них проще всего понять и использовать? Я использую Visual C ++, но с библиотеками Iostream, Math, String, e.t.c. скопировано из компилятора DevC ++.

Ответы [ 4 ]

6 голосов
/ 04 ноября 2011

Вы не можете добавить «переменные» в программу после ее компиляции.Вы можете получить более или менее тот же эффект, используя std::map со строкой в ​​качестве типа ключа.

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

4 голосов
/ 04 ноября 2011

Насколько я знаю, ты не можешь. Имена переменных задаются во время компиляции, а не во время выполнения. C ++ не интерпретируется (как Perl, Python или JavaScript), поэтому он не может вычислять выражения во время выполнения. C ++ - это старая школа.

Я предлагаю вам использовать массивы или классы C ++ списка / карты, чтобы попытаться смоделировать это поведение.

2 голосов
/ 04 ноября 2011

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

std::map<std::string, std::string> variables;

Очевидно, что значением может быть любой тип, а не просто строка, как я использовал здесь, вы можете использовать double, int, bool или любое другоесоответствует вашим потребностям, или если вам нужны другие типы, вы можете даже использовать вариант Boost , как предложил Джеймс Канзе, или любой другой подобный класс.

Подробнее о картах здесь: http://www.sgi.com/tech/stl/Map.html и здесь: http://www.cplusplus.com/reference/stl/map/

Вы можете использовать любую карту, но карта, использующая хеширование для хранения ключа, может быть вашей лучшей ставкой.STL hash_map: http://www.sgi.com/tech/stl/hash_map.html

1 голос
/ 04 ноября 2011

Итак, в основном вы пытаетесь включить интерпретируемый язык в вашу программу на C ++.

Есть много языков, которые поддерживают встраивание в программу на C ++ Lua, JavaScript, Python и многие другие.

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