問題があります。 2つのクラスがあります。Cでの型キャスティングと継承
struct Base {
Base* retain() {
//retain here
return this;
}
};
struct Derived : Base {
};
Derived *d1 = new Derived();
Derived *d2 = d1->retain(); //error here: need to typecast to Derived*
Derived *d3 = (Derived*)d1->retain(); //OK
は私が手動で結果を型キャストする必要はありませんように、保持()関数を書き換えする方法はありますか?つまり、retain()は、派生型のオブジェクトを返す必要があります。
これは私の答えよりも優れています。これを好む – thb
ところで、最初のアプローチは["Curiously Recurring Template Pattern"(CRTP)]と呼ばれています(http://ja.wikipedia.org/wiki/Curiously_recurring_template_pattern) –