共変の戻り値の型と可能な (ない) アプリケーションについてお聞きしたかったのです。新しいデザインパターンを発見したと思ったのですが、残念ながらうまくいきません:(
例から始めましょう:
// test.h
class B {public: virtual B* getSelf() {return this;} };
class D : public B { public: D* getSelf() {return static_cast<D*>(this);} };
void compute(B* something);
void compute(D* something);
// test.cpp
int main()
{
B* b = new D();
compute(b->getSelf()); // This calls compute(B*), not compute(D*)
}
なぜそれが機能しないのか考えていますか?
PS下手なフォーマットで申し訳ありません
編集:もちろん、メインでキャストを使用すると、compute(D*) が正しく呼び出されます。
編集#2:できる限り切り替えを避けようとしています:)