Я нахожусь в процессе создания очень простой игры, в которой объекты (элементы A или B) летают по экрану, сталкиваются и т. Д.
Единственная разница между A и B — это цвет объекта (A = черный, B = белый).
Можно ли иметь контейнер-элементный элемент (или 20 элементов) для хранения 10 А и 10 В. Я осмотрелся вокруг, и я могу сделать это, если у меня есть Вектор типа A или Типа B, но НЕ смесь.
Любая помощь приветствуется! Спасибо — и счастливой запоздалой пасхи
KJ
редактировать:
У A и B есть ряд различных характеристик, например, разные скорости, с которыми они могут двигаться, а также разные способности. E, g A может стрелять лазером, а B — нет. Вот почему я использую разные классы.
Контейнеры C ++ являются однородными, то есть вы не можете хранить в них различные типизированные объекты. Однако вы можете хранить указатели на базовый тип и использовать два производных A
а также B
классы.
Однако, в вашем случае, если разница только в цвете, я не вижу причин иметь разные классы. Просто имейте свойство color в классе.
Если вам нужны разные классы, вы можете использовать базовый класс, как показано ниже:
class Base
{
public:
// base properties both classes share
// virtual methods etc.
};
class A : public Base
{
public:
// class A specific methods/properties
};
class B : public Base
{
public:
// class B specific methods/properties
};
Теперь вы можете иметь вектор указателей базовых объектов, которые могут быть любого типа A
или же B
,
std::vector<Base*> objects;
A *a = new A();
B *b = new B();
objects.push_back(a);
objects.push_back(b);
Если вам действительно нужно хранить разные объекты в контейнерах, то возможно:
`boost::any`
правильный ответ?