Предполагая, что вы хотите хранить объекты, которые не наследуют общий класс, самым простым способом, который приходит на ум, является использование boost::any
.
Вы по-прежнему должны быть уверены в том, какой тип каждого объекта хранится в каждом индексе (то есть, чтобы иметь возможность выполнять правильные boost::any_cast
).
Вы должны сделать это, а не хранить указатели до void
. Это ближе всего к семантически правильному способу хранения «того, что вы знаете, типа, но компилятор не делает», подразумевая приведение при извлечении значения.
Хотя оба (any
и void
указатель) будет работать таким же образом (указатель в сторону), если вы приводите к неправильному типу, any
будет сгенерировано исключение bad_any_cast
(IIRC), в то время как с void
указателем, вы будете получить неопределенное поведение. Простая попытка на coliru дала a segfault.
Вы пытались получить указатель на этот вектор? Как вы хотите определить тип броска, который вам понадобится? - Сделать все элементы в векторе, унаследованном от базового класса, такого как «IObject». В этом случае вы знаете, какой тип вектора и C++ позволяет безопасно использовать. – harper
Не очень хорошая идея. – Ajay
Да, но вы запрашиваете массив shared_ptr <>. Пара - это что-то другое и может быть полезно. – harper