E>Понятно, что можно завести реестр объектов и проверять указатель на принадлежность, но хотелось бы обойтись без этого.
E>По идее можно проверить vptr, но к нему кроскомпиляторно не подберешься, да и всякие случаи вроде множественного наследования...
Абстрактный виртуальный kind_of в базовом классе.
Типа:
enum ST {
eS2, eS3
};
struct S {
virtual ST kind_of() const = 0;
};
struct S2 : S {
virtual ST kind_of() const { return eS2; }
};
struct S3 : S {
virtual ST kind_of() const { return eS3; }
};
int main(int argc, char* argv[])
{
S2 s;
S3 s2;
void *p = &s;
void *p2 = &s2;
ST a = ((S*)p)->kind_of();
ST b = ((S*)p2)->kind_of();
return 0;
}
Но ИМХО стремно это как то, если потерять контроль над кодом.