- 主题:为啥virtual clone(),返回智能指针,不能covariance?
【 在 DoorWay 的大作中提到: 】
: 赞博闻广识,查到一点资料,正是如此处理。
他这个方案能满足你的要求吗? 返回的类型还是unique_ptr<Base>而不是unique_ptr<Child>啊? 你需求到底是什么?
--
FROM 1.91.32.*
【 在 DoorWay 的大作中提到: 】
: 子类再加个Clone,返回想要的类型,
这样的话之类的clone就不是虚函数了啊。 没法通过基类指针或者引用调用。
--
FROM 1.91.32.*
【 在 here080 的大作中提到: 】
: clone本来就不是虚的,CloneData()才是虚的。
: 所有的目的都达到了呀。
也许我误解了LZ的本意。 但是这个问题的引入不只是需要一个虚函数, 而是需要一个能够在外面使用基类指针或者引用调用的虚函数吧? 这也是虚函数的最常见的用法: 代码拿到一个指向基类的指针或者引用,不管其具体类型,通过调用虚函数得到合适的行为。
你的方案里面,虚函数是是pretected,外界无法调用。 clone又不是虚的,外面调用还需要特定子类型。
--
FROM 1.91.32.*
【 在 here080 的大作中提到: 】
: 我想了一个,这么解释你能明白吗:
: Base base;
: Derived derived;
: ...................
先赞一下code,清晰明了~
我完全知道你的方案会达到这样的效果啊, 我只不过不知道这样是否能完全解决原来LZ的要求
“最近有这种需求,子类提供克隆方法,返回自身类型的智能指针,不行。必须返回基类的智能指针”
我觉得目前看了LZ的这个要求“从字面上来看”是没法满足的。 但是你的方案确实很不错,满足了LZ的真正的实际要求。 这么说是不是大家都能理解了~~
--
FROM 222.126.162.*