以下のようなクラス階層があります。
class Base
{
public:
virtual Base& derived() const=0;
}
class Derived:public Base
{
public:
Derived& derived() const
{
return dynamic_cast<Derived&>(*this);
}
void test(){cout<<"Hi";}
}
の目的はderived()
、正確な型の参照を返すことです。
int main()
{
Derived d;
Base &b = d;
(b.derived()).test();
return 0;
}
コンパイルエラーが発生します
can't find void test() in Base
確認したところ、Derived::derived()
電話がかかってきました。Derived::derived()
期待どおりに派生クラスへの参照を返さなかったようです。