2015-09-25 6 views
-1

В настоящее время я пишу симулятор для карточной игры. Я пытаюсь закодировать генератор движения. У меня есть базовый класс «Карточка», из которого я получаю каждую карту (около 150 разных). Они довольно специфичны, поэтому я не могу реализовать их в рамках одного класса (и я не хочу использовать какой-либо язык сценариев).Динамически генерировать новые объекты класса из разных классов

Что мне нужно (хочу): Код 150 классов, полученных из «Карты». Теперь мне нужно генерировать новые объекты во время выполнения и вставлять их в свою доску.

Например:

std::vector<Card*> board; 
board.push_back(new Card132()); 

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

Заранее спасибо.

+0

В чем заключается выбор между «Card132» и «CardNNN»? –

+0

У этого дизайна есть запах, но вы всегда можете использовать массив заводских функций. –

+0

Прежде всего рассмотрим сохранение [smart pointers] (http://en.cppreference.com/w/cpp/memory) в вашем векторе. –

ответ

0

Используйте заводской шаблон.

Объект каждого класса статически создается и регистрируется на карте с именем. Все классы происходят из одной базы.

Если вы хотите построить объект определенного типа, передайте его имя фабрике, найдите тип, сгенерируйте новый и верните его через объект базового указателя.

Добавление новой карты - это вопрос кодирования нового класса и регистрация его имени на заводе.

0

Код, который может решить сам, какую карту нужно сгенерировать.

if (want to generate card 1) 
{ 
    board.push_back(new Card1()); 
} 
else if (want to generate card 2) 
{ 
    board.push_back(new Card2()); 
} 
else if ... 
Смежные вопросы