использование typeid для сравнения производных классов

У меня есть вектор указателей на производные объекты, вставленные пользователем (так что я полагаю, что правильный термин "известен только во время выполнения)" ::

vector<Person *> vect;

Производными классами являются Male и Female. Я хочу сделать итерацию вектора, чтобы выбрать только женские объекты и вызвать его копирующий конструктор. Я придумал 3 решения:

  1. Использовать флаг;
  2. Использовать typeid
  3. Вставить вызов конструктора копирования в конструктор по умолчанию для Female, чтобы каждый раз, когда пользователь создает его, автоматически создавал двойника.

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

typeid(vect.at(i))==typeid(Female)

Правильно ли это выражение? Есть ли другой способ обозначить проблему?

6
задан Ale 1 February 2012 в 20:46
поделиться