Схемы именования переменных для объектов в C ++?
-
03-07-2019 - |
Вопрос
Я реализую BFS, и он собирается пройти через упорядоченное дерево, чтобы найти кратчайшее решение головоломки.
То, что я буду делать, - это создание объекта Snapshot, в котором хранится текущая позиция каждой части головоломки. Я добавлю этот объект Snapshot в очередь и проверю, является ли это решением. Тем не менее, я создаю эти снимки на лету. Так есть ли какой-нибудь способ, который автоматически генерирует имена объектов Snapshot, когда они помещаются в очередь?
или я должен следить за тем, сколько объявлений я сделал, и просто жестко закодировать это, сказав ...
Снимок снимка 2; Снимок снимок3; Снимок снимок4; и т.д .. р>
Решение
Есть способ - вы используете токен препроцессора Оператор вставки . Это позволяет вам создать имя на основе переменной, поэтому вы должны указать:
#define S(variable) snapshot#variable
и вы сможете создавать переменные с именами snapshot1, snapshot2 и т. д.
Snapshot S(1)
Snapshot S(2)
Однако я не уверен, что это то, чего вы действительно хотите, возможно, я однажды использовал эту технику на практике, и это было для генератора кода.
Другие советы
Я думаю, вы спрашиваете, как вы создаете и храните много объектов, когда не знаете, сколько их будет.
Вам нужно создать массив объектов. Затем вы можете получить к ним доступ как снимок [1], снимок [2] ... снимок [i].
Вы можете использовать очередь из стандартной библиотеки шаблонов, а затем создать функцию, которая создает объект Snapshot и помещает его в очередь. Присвойте этой функции статическую переменную, которая увеличивается каждый раз, когда она вызывается и записывается в поле id снимка.
Я думаю, нам нужно больше информации для этого. Если вы просто выводите их из очереди, почему вас волнует, как они называются? Объекты в очереди обычно не нумеруются, если вы не реализуете их в массиве.
Извините, но вся эта очередь вызывает ненужное замешательство. Р>
Давайте рассмотрим другой пример. Таким образом, для этой головоломки, количество частей в головоломке определяется пользователем. Я создаю программу так, что каждый кусочек головоломки - это отдельный объект.
Поэтому, когда я приступаю к созданию этих пьес, могу ли я использовать какие-то схемы именования переменных для обозначения этих пьес. так как то просто в качестве примера ...
for (int i-0; i < constraint; i++)
Piece "Piece"+i = new Piece();
Вы не можете динамически создавать имена переменных в C ++, по крайней мере без некоторого (воображаемого?) дополнения.
edit: Помимо этого, я выполнил задание, которое, как я полагаю, похоже на ваше в классе AI, где мы рассмотрели основы, такие как BFS, DFS и A *. Ни разу не было необходимости иметь объекты с уникальными именами для " снимков " ;, и я использовал очереди.
edit2: и если вам нужно отслеживать, сколько у вас снимков, создайте переменную count, которая будет увеличиваться при каждом создании объекта.