移植可能な 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
あり、プログラム内のすべて の は(は 1 つの例にすぎません)std::type_info
から派生した動的な型を持ちます。std::type_info
abi::__class_type_info
この ABI を使用すると、std::type_info
. そうすることで、2 つstd::type_info
の が 2 つの型を表しているかどうかを判断できdynamic_cast
ますstatic_cast
。
このようなソリューションでは、変換コンストラクターまたは変換演算子を使用した型間の変換が考慮されないことに注意してください。その制限が許容できるとしても、このルートはお勧めしません。これは簡単なプロジェクトではなく、非常にエラーが発生しやすいものです。しかし、これはおそらくあなたの C++ 実装が を実装する方法dynamic_cast
であるため、明らかに不可能ではありません。