Можно ли хранить группу объектов по их базовому классу, скажем, в std :: list без указателей. Мне бы очень хотелось, чтобы объекты содержались в контейнере, а затем получить указатель на объект в контейнере и dynamic_cast, чтобы исправить производный класс.
У меня все отлично работает с помощью указателей. Нравится (супер простая версия):
class IComponent
{
virtual ~Icomponent(){}
}
class PositionComponent: public IComponent
{
//...
float x, y;
}
std::list<IComponent*> CList;
//...
// fill the list
// put reference to object in pComponent
//...
PositionComponent* position = dynamic_cast<PositionComponent*>( pComponent)
position->x = 346452.235612;
Но управление памятью - огромная боль. Моя фактическая структура -
map<enumValue, map<int, IComponent*> >
У меня такое чувство, что я не могу использовать сами объекты, потому что, когда я добавляю какой-либо производный компонент в список, дополнительные данные будут обрезаны, и у меня останется только базовый класс. Это не фигурировало, пока я не попробовал static_cast вместо этого, и он потерпел крах.
Может ответить на мой первоначальный вопрос и / или подтвердить мои чувства по этому вопросу. Спасибо!