0

共変の戻り値の型と可能な (ない) アプリケーションについてお聞きしたかったのです。新しいデザインパターンを発見したと思ったのですが、残念ながらうまくいきません:(

例から始めましょう:

// 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:できる限り切り替えを避けようとしています:)

4

1 に答える 1