Хочется узнать, указывает ли void* на конкретный тип
struct Base {
virtual void ~Base() {}
};
struct Derived : Base {};
bool isBase(void *ptr) {
// ???
}
Base b;
Derived d;
int i;
isBase(&b); // true
isBase(&d); // true
isBase(&i); // false
Понятно, что можно завести реестр объектов и проверять указатель на принадлежность, но хотелось бы обойтись без этого.
По идее можно проверить vptr, но к нему кроскомпиляторно не подберешься, да и всякие случаи вроде множественного наследования...