Задать вопрос

Как в C++ хранить объекты (либо указатели на них) в массиве (std::vector)?

Есть ли возможность хранить объекты (или указатели на них) разных классов в массиве? И как?
  • Вопрос задан
  • 7869 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 2
fornit1917
@fornit1917
Например наследуя ваши классы от одного базового, и вектор соответственно для этого базового класса делаете. Тогда в него можно класть объект любого класса, унаследованного от базового.
В с# и java вообще все классы онаследованы от базового класса Object, поэтому в контейнер для Object можно объект любого класса положить. Есть ли такой стандартный базовый класс в плюсах сказать к сожалению не могу, не силен в с++. Но можно свой сделать.
Ответ написан
Teivaz
@Teivaz
А, ну и очевины вариант в стиле С
std::vector<void*> containsAnyPtr;
containsAnyPtr.push_back( (void*)(new MyClassOne) );
containsAnyPtr.push_back( (void*)(new MyClassTwo) );
containsAnyPtr.push_back( (void*)(new NotMyClass) );

Только вопрос теперь в том, какой именно объект оттуда достанем. Пропадает строгая типизация, которая является фишкой С/С++.

P.S.
Можно немножко осиплюсплюсить:
std::vector<void*> containsAnyPtr;
containsAnyPtr.push_back( reinterpret_cast<void*>(new MyClassOne) );
containsAnyPtr.push_back( reinterpret_cast<void*>(new MyClassTwo) );
containsAnyPtr.push_back( reinterpret_cast<void*>(new NotMyClass) );
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Teivaz
@Teivaz
Ну или чтобы не лезть в родственные связи можно использовать, например:
std::vector<boost::any> containsAny
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы