あなたが変数のtypeidを知っている場合には、これは可能です。これは、あなたがいつもC++でtypeid演算子を使って知ることができます。
Derived* pd = new Derived;
Base* pb = pd;
cout << typeid(pb).name() << endl; //prints "class Base *"
cout << typeid(*pb).name() << endl; //prints "class Derived"
cout << typeid(pd).name() << endl; //prints "class Derived *"
その後、convertible type ids
(変換可能タイプ)の場合などmultimap
または(あなたがに変換可能であるかどうかを知りたい)typeid
として、キーと値を持つを作成する必要があります。この場合、この場合は、のkey
にはconst type_info& to
にマップされたvalue
があるかどうかを検索するためにマップにアクセスできます。はいの場合は、true
またはfalse
とboolを戻すことができます。しかし、この場合、コード内にすべてのクラスと継承が正しく表示されていることを確認する必要があります。そしてそれに基づいて、それが法的な変換になるかどうかを決定し、その基準で地図を追加します。しかし、これは面倒なプロセスであり、私はそれを使用することはできません。
一般的に、タイプが他のタイプにキャストされているか正しくない場合は、dynamic cast
を通して知ることができます。 static_cast
は互換性のない型を相互にキャストしますが、間違った使用は実行時エラーにつながります。
私はそれが可能ではないと思います。しかし、本当の疑問は、あなたはそのような機能で何をしますか? – Nawaz
また、なぜあなたは 'type_info'だけを持っていますか? – mfontanini
"これは実際にタイプAとタイプBを知っているとうまくいきます"。しかし、どのようにタイプを知らないのですか? – jrok