нет, нужен полиморфизм
попробуйте почитать про
std::variant
допустим, вы собираетессь хранить там не все что угодно, а только double, string и bool
тогда надо написать
using polimorf_ptr = variant<double*, string*, bool*>;
vector<polimorf_ptr> ...; // получается у вас не void*, а polimorf_ptr
!!!!1 обновил:
попробуй использовать PolimorfPtr вместо void*. я на коленке сделал, возможно тебе идея понравится и ты доработаешь:
void no_destructor(void*) {}
struct PolimorfPtr
{
public:
PolimorfPtr()
: ptr(nullptr) //надеюсь, ты шаришь за двоеточие
{}
PolimorfPtr(const PolimorfPtr&) = delete;
PolimorfPtr(PolimorfPtr&& other) //надеюсь, ны знаешь что такое r-value - ссылка
:ptr(other.ptr),
destructor(other.destructor)
{
other.ptr = nullptr;
other.destructor = no_destructor;
}
//мне лень писать оператор =, оператор *, -> и вот это вот все, надеюсь ты знаешь зачем нужны эти операторы и понимаешь о чем я
PolimorfPtr(void* pointer, void destructor_calling_function(void*) = no_destructor)
: ptr(pointer),
destructor(destructor_calling_function)
{}
void* ptr; //====================================================== тут хранится указатель
void (*destructor)(void*) = no_destructor; //===========тут хранится указатель на деструктор (на функцию, которая вызывает деструктор)
~PolimorfPtr()
{
destructor(ptr);
ptr = nullptr;
destructor = no_destructor;
}
};
сори за коментарии для маленьких, я не знаю уровень твоего знания с++, возможно ты с этим уже знаком