- 主题:为啥virtual clone(),返回智能指针,不能covariance?
virtual unique_ptr<Child> Child::Clone() override;
最近有这种需求,子类提供克隆方法,返回自身类型的智能指针,不行。必须返回基类的智能指针?
这种一般怎么设计解决?
--
修改:DoorWay FROM 1.80.221.*
FROM 1.80.221.*
virtual肯定不行。用模板?
--
FROM 123.115.129.*
没啥好办法,返回基类的吧
【 在 DoorWay () 的大作中提到: 】
: virtual unique_ptr<Child> Child::Clone() override;
:
: 最近有这种需求,子类提供克隆方法,返回自身类型的智能指针,不行。必须返回基类的智能指针?
:
--
FROM 59.148.127.*
这玩意儿理论上的难点在哪儿?为啥不做成标准、编译器直接支持呢。
【 在 fanci 的大作中提到: 】
: 没啥好办法,返回基类的吧
--
FROM 124.114.151.*
主要是你的需求太奇葩。
【 在 DoorWay 的大作中提到: 】
: 这玩意儿理论上的难点在哪儿?为啥不做成标准、编译器直接支持呢。
--
FROM 58.33.198.*
为什么奇葩?是error-prone,还是过于精细?我听不出好坏哈
我调研了,希望构造函数可以virtual,是非分之想。
这种clone后,希望直接是Child type,调用Child 方法,还算合理的要求吧?
【 在 Madlee 的大作中提到: 】
: 主要是你的需求太奇葩。
:
--
FROM 117.39.234.*
多写一个 dynamic_cast<> 的事,不值得吧。。
java 的 clone() 同样返回 Object, 而不是子类。
【 在 DoorWay (DoorWay) 的大作中提到: 】
: 为什么奇葩?是error-prone,还是过于精细?我听不出好坏哈
: 我调研了,希望构造函数可以virtual,是非分之想。
: 这种clone后,希望直接是Child type,调用Child 方法,还算合理的要求吧?
: ...................
--
FROM 110.85.22.*
看看CRTP有没可能实现这个需求
--
FROM 123.114.82.*
遇到过,没想到很优雅的解决办法。后来干脆直接返回裸指针了,调用处用 unique_ptr 来接返回值。
【 在 DoorWay (DoorWay) 的大作中提到: 】
: virtual unique_ptr<Child> Child::Clone() override;
: 最近有这种需求,子类提供克隆方法,返回自身类型的智能指针,不行。必须返回基类的智能指针?
: 这种一般怎么设计解决?
: ...................
--
修改:vonNeumann FROM 113.66.217.*
FROM 113.66.217.*
unique_ptr 毕竟是库实现的,如果要支持,怕是得对所有可以隐式转换的类型都支持才行。。如果单独给 unique_ptr/shared_ptr 开口子那太难看。。
【 在 DoorWay (DoorWay) 的大作中提到: 】
: 这玩意儿理论上的难点在哪儿?为啥不做成标准、编译器直接支持呢。
--
FROM 113.66.217.*