【发布时间】:2024-04-10 14:00:02
【问题描述】:
在 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?
};
编辑: 正如 Konrad Rudolph 所建议的,这不是直接可能的。但是,我遇到了这种方法:
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();
}
};
你会建议走这条路吗?
【问题讨论】:
标签: c++ templates covariance smart-pointers virtual-functions