在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();
}
};
你会建议这样做吗?
答案 0 :(得分:8)
是否可以将此功能扩展为智能指针? (假设智能指针是一些模板类)
否:C ++不知道/允许协变或逆变模板。类型Ptr<A>
和Ptr<B>
之间没有关系,即使A
继承自B
。
答案 1 :(得分:-1)