Это будет работать, если вы определили StoreItem::operator<
, но есть другой способ, который может быть немного лучше. У STL есть холодная сортировка. Вы можете определить <
для StoreItem*
, а затем использовать list<...>::sort()
.
(И вы, вероятно, уже думали об определении своего собственного SortedItemList
класса, который обрабатывает внутреннюю сортировку.)
И да, tempMovie(**iter)
будет работать, среди прочего.
EDIT:
Кажется, я слишком рано говорил о том, чтобы вытащить что-то из инвентаря. Это работает:
list<StoreItem *>::iterator citr = items.begin();
Food *fp = dynamic_cast<Food *>(*citr);
Food ff(*fp);
Обратите внимание, что вы должны знать, что этот StoreItem*
фактически указывает на Food
- если он указывает на Clothing
, вы получите ошибку сегментации или хуже. Чтобы выяснить это, вы можете реализовать свой собственный StoreItem::whatTypeAmI()
или использовать идентификацию типа во время выполнения C ++:
#include <typeinfo>
...
Food a;
StoreItem *sp = *citr;
if(typeid(*sp)==typeid(a))
{
// it's a Food
}
(знайте, что вы можете многое сделать с StoreItem*
или StoreItem&
, не зная, что это за тип - полиморфизм - ваш друг.)