Как получить доступ к элементам вектора polymorphi c с помощью for? - PullRequest
0 голосов
/ 28 марта 2020

У меня есть базовый класс, называемый StateDefinition, и он имеет следующее определение:

class StateDefinition
{
public:
    StateDefinition();
    virtual bool condition() { return false; }
    virtual void reach() {}
};

У меня есть некоторые производные классы, которые переопределяют методы условия и досягаемости. Я использую std::vector<StateDefinition*> m_stateMachine для хранения объектов из производных классов. Затем я пытаюсь получить доступ к элементам следующим образом:

for (auto state = m_stateMachine.begin(); state != m_stateMachine.end(); state++)
    {
        if (!state->condition())
        {
            state->reach();
            break;
        }
    }

Но этот код не компилируется, я получаю следующую ошибку:

ошибка: базовый тип элемента 'std :: _ Simple_types :: value_type' (он же StateDefinitions *) не является структурой или объединением

Поэтому мой вопрос: как получить доступ к элементам вектора polymorphi c с помощью for

1 Ответ

1 голос
/ 28 марта 2020

состояние является итератором, и вы используете вектор указателя, поэтому вам необходимо разыменовать еще раз

for (auto state = m_stateMachine.begin(); state != m_stateMachine.end(); state++)
    {
        if (!(*state)->condition())
        {
            (*state)->reach();
            break;
        }
    }

В противном случае проще:

for (auto state : m_stateMachine) {
   if (!state->condition())
   {
       state->reach();
       break;
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...