Нет, void*
s не имеют абсолютно никакой информации, связанной с ними, и когда вы приводите указатель на void*
, вы полностью теряете тип. Вам нужно будет найти другой способ хранения разных типов в одном контейнере, например, с наследованием.
Вы также можете сделать что-то вроде этого:
class MyContainer {
struct cont {
void* ptr;
type_info* ti; // pointer, not reference, so this struct can be copied
};
std::vector<cont> v;
public:
template<typename T>
void Put(T* x) {
v.push_back({ x, &typeid(T) });
}
// do whatever you want with Get using *v[x].ti
};
int x = 1;
double y = 2.0;
MyContainer c;
c.Put(&x);
c.Put(&y);
Work(c);
Но я не знаю, какая это помощь, не зная, что вы пытаетесь сделать. Возможно, вам придется прибегнуть к чему-то более продвинутому, например, boost::any
.