В 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();
}
};
Вы бы предложили пойти по этому пути?