В портативном C++ невозможно выполнить то, что вы хотите.
Это может можно добиться частичного ответа если вы ограничиваете себя на данной платформе. Например, те платформы, которые прилипают к Itanium ABI будут иметь реализацию этой функции:
extern "C"
void* __dynamic_cast(const void *sub,
const abi::__class_type_info *src,
const abi::__class_type_info *dst,
std::ptrdiff_t src2dst_offset);
В этом ABI, abi::__class_type_info
представляет собой тип, полученный из std::type_info
и всехstd::type_info
ы в программе вывел динамический типа от std::type_info
(abi::__class_type_info
- всего лишь один пример).
С помощью этого ABI можно построить инструмент, который будет перемещаться по иерархии наследования любого типа (во время выполнения), учитывая его std::type_info
. И при этом вы можете определить, представляют ли два std::type_info
s два типа, которые могут быть dynamic_cast
или даже static_cast
друг другу.
Обратите внимание, что такое решение не будет учитывать преобразование между типами с использованием конструктора преобразования или оператора преобразования. И даже если это ограничение приемлемо, я не рекомендую этот маршрут. Это не простой проект, и он будет очень подвержен ошибкам. Но это, вероятно, то, как ваша реализация на C++ реализует dynamic_cast
, так что это явно не невозможно.
Я не думаю, что это возможно. Но реальный вопрос: что бы вы сделали с такой функцией? – Nawaz
Кроме того, почему у вас есть только 'type_info'? – mfontanini
«Это хорошо работает, если вы действительно знаете типы A и B».Хорошо, но почему вы не знаете типы? – jrok