C ++では、戻り型が元の戻り型のサブクラスである限り、サブクラスは仮想関数をオーバーライドするときに別の戻り型を指定できます(両方ともポインター/参照として返されます)。
この機能をスマートポインターにも拡張することは可能ですか?(スマートポインタがいくつかのテンプレートクラスであると仮定します)
説明する:
class retBase {...};
class retSub : public retBase {...};
class Base
{
virtual retBase *f();
};
class Sub : public Base
{
virtual retSub *f(); // This is ok.
};
class smartBase
{
virtual smartPtr<retBase> f();
};
class smartSub : public smartBase
{
virtual smartPtr<retSub> f(); // Can this be somehow acheived?
};
編集:コンラッド・ルドルフが示唆したように、これは直接可能ではありません。しかし、私はこの方法に出くわしました:
class smartBase
{
protected:
virtual retBase *f_impl();
public:
smartPtr<refBase> f()
{
return f_impl();
}
};
class smartSub : public smartBase
{
protected:
virtual retSub *f_impl();
public:
smartPtr<refSub> f()
{
return f_impl();
}
};
このように行くことを提案しますか?