Умная идея, сделать все переменные в программе изменяемыми во время выполнения программистом? - PullRequest
1 голос
/ 14 мая 2009

Я думал о том, чтобы сделать это с C ++, в основном из внешнего редактора или чего-то, что программист может сказать: MyClass :: dude = "hello", где "dude" - статическое целое число в "MyClass".

Что программа делает во время выполнения, так это то, что она разбивает входные данные на MyClass :: dude = "hello", находит класс с именем "MyClass" и назначает в нем переменную dude как "hello".

Идея заключается в том, чтобы он действовал как своего рода отладчик времени выполнения.

Это безопасно / вменяемое?

Ответы [ 5 ]

3 голосов
/ 14 мая 2009

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

2 голосов
/ 14 мая 2009

Ваш типичный отладчик уже может сделать это для всех основных типов.

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

1 голос
/ 14 мая 2009

Лучше всего использовать что-то вроде Boost :: python и интегрировать настоящий язык сценариев. Это намного меньше работы, чем создание собственного мини-языка. Например, он уже знает, как обращаться с такими проблемами, как «MyClass :: dude =« hello », где« dude »- это статическое целое число в« MyClass ».

0 голосов
/ 14 мая 2009

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

0 голосов
/ 14 мая 2009

Описание не очень понятно, вы можете уточнить? Это должно происходить во время работы программы? Или это будет запускаться с использованием переменной?

Одним из различий между C ++ и Java является то, что имена классов на самом деле не используются в исполняемой программе (если только она не была специально скомпилирована для отладки). Таким образом, программа никак не может заставить работающую программу C ++ найти определенную переменную в этой программе.

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

Мне также не ясно, как это связано с наследованием (заголовок вашего вопроса).

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