Как проверить, имеет ли конструктор определенный параметр в C ++

0

У меня есть класс Enemy, у которого есть три конструктора. У этого есть значение по умолчанию, одно со статистикой и элементом, и одно с только статистикой. Я хочу выполнить функцию, которая может определить, есть ли у противника предмет. Я полагаю, что я мог бы легко создать другой параметр, который содержит целочисленное значение количества элементов, которые у них есть, но мне бы очень хотелось иметь возможность просто проверить параметр item, чтобы мне не нужно было создавать другой параметр конструктора.

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

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

  • 1
    Можете ли вы опубликовать свой соответствующий код?
  • 1
    Не уверен, почему вы захотите сделать это, вместо того, чтобы просто иметь члена, который указывает, есть ли у экземпляра Enemy предмет.
Теги:
c++11
visual-c++

1 ответ

0
Лучший ответ

Задача может быть не очень сложной, если вы всегда можете опустить заданный параметр со значением по умолчанию (например, Nothing). Параметр, который мы можем опустить, должен быть либо последним, либо предыдущим. Итак, то, что вы описали, относительно легко вписывается в:

class Stats
{
    public:
      // some stat methods and data
};


enum Item
{
   Nothing,
   Something1,
   Something2,
   Something3
};


class A
{
   explicit A(Item item = Nothing);
   A(const Stats& stats, Item item = Nothing);
};


A::A(Item item)
{
   // in both constructors just recognize if the item is Nothing
   if (item == Nothing)
   {
      // default, no item
   }
   else
   {
      // deal with an item
   }
}

Таким образом, ваш клиентский код сможет:

// we imply item != Nothing here
A one;                 // default
A two(item);           // with an item
A three(stats);        // with stats
A four(stats, item);   // with stats and an item

Конечно, вы должны указать элемент и статистику как-то.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню