Проверка во время выполнения броска из пустоты *
Скажи, что у меня естьvoid*
содержащий указатель на неизвестноеclass
, Я хочу использоватьdynamic_cast
сделать проверку во время выполнения на тип класса, который я на самом деле. Например:
class Foo {};
void* bar = new Foo;
Если я попытаюсь сделатьdynamic_cast<Foo*>(bar)
Я получил:
'void *': недопустимый тип выражения для dynamic_cast
Однако янеобходимость dynamic_cast
потому что в моей реальной ситуации я не уверен, чтоbar
на самом делеFoo*
.
я прочелВот что одним из решений этого является создание базового класса для всех объектов, которыеbar
может содержать,reinterpret_cast
указатель на этот базовый класс, а затем попробуйтеdynamic_cast
от этого объекта указатель наFoo
.
Это сложно для меня, потому что объекты, которые могут быть сохранены вbar
не все под моим контролем. (И потому что попытка воссоздать Java вызывает у меня изжогу.) Есть ли другой способ сделать это?