reinterpret_cast
実際には派生インスタンスポインタであるベースポインタからキャストするためにどのシナリオを使用できますか?(ポリモーフィズムを介して)。
継承が多形である場合、静的キャストは機能しません。
私はこの些細なシナリオを検討しました:
class A
{
public:
virtual void Hello()
{
cout<<" A ";
}
virtual int GetType() { return 1; }
};
class B: public A
{
public:
void Hello()
{
cout<< " B ";
}
void Do()
{
cout << " Another method of B";
}
int GetType() { return 2;}
};
/// ... sample/test code
A* a1 = new A();
A* b1 = new B();
A* a2;
B* b2;
if (a1->GetType() == 1)
{
a2 = a1;
a2->Hello();
}
else
if (a1->GetType() == 2)
{
b2 = reinterpret_cast<B*>(a1);
b2->Do();
b2->Hello();
}
非常に素朴な「疑似型識別方法」GetType()
に注意してください。私はそれらを変換できるかどうかを判断していました。そのような目的で、dynamic_castsを回避するためにreinterpret_castsを使用するのはまったく間違っていますか?(つまり、本質的に危険なパラノイックな設計ですか?)柔軟性が低く、望ましくない問題が発生する可能性がありますか?通常の動的キャストを実行する方が安全でパフォーマンスコストが少ない価値がありますか?多重継承および/または仮想継承は、ポリモーフィック/動的キャストを除く他のキャスト操作を台無しにすることを知っています)。