Как генерировать имена динамических объектов C ++? - PullRequest
7 голосов
/ 20 июня 2009

Я хотел бы сгенерировать количество объектов (в C ++) на основе количества / числа, которое вводит пользователь.

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

Нет ли обходного пути прямого использования имен, таких как Object1, Object2 ..... ObjectX вместо того, чтобы иметь Имя класса * Объект [] а затем использовать индекс массива для получения объекта?

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

Спасибо!

Ответы [ 5 ]

8 голосов
/ 20 июня 2009

Если вам нужен массив динамического размера, используйте std :: vector. Вы не сможете изменить размер встроенного массива. Если вы хотите получить объект по строковому имени, вам следует использовать std :: map, у него есть индексатор:

std::map<string, Classname> myMap;
myMap["Object1"] = Classname();
Classname newClassname = myMap["Object1"];
6 голосов
/ 20 июня 2009

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

3 голосов
/ 20 июня 2009

Вы не можете сделать это, потому что C ++ не имеет "среды" ( отражение ), где могут находиться переменные (и метаданные). Более того, в C ++ все имена переменных исчезают при компиляции кода.

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

3 голосов
/ 20 июня 2009

Когда я начал программировать 9 лет назад, я задал себе тот же вопрос. Ответ: ты не можешь.

Вы действительно можете использовать массив и динамически изменять его размер, однако использовать вектор stl намного проще (если вы научитесь его использовать).

3 голосов
/ 20 июня 2009

Нет, нет. Более того, вам не нужно; используйте std::vector.

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