次のコードは std::bad_cast をスローします
struct Foo {
void foo () {}
};
struct Bar {
Bar () {
dynamic_cast <Foo &> (*this) .foo ();
}
virtual ~ Bar () {}
};
struct Baz : public Foo, public Bar {
};
int main ()
{
Baz b;
}
正しく評価するために「完全な継承格子をトラバースする」ため、dynamic_cast に実装パフォーマンスのトレードオフがあることを読んだことを覚えています。ここでコンパイラが行う必要があるのは、最初にキャストアップしてから再度キャストダウンすることです。
上記の作業を行うことは可能ですか、それとも追加する必要があり
virtual Foo* Bar::as_foo()=0;
ますか?