【发布时间】:2019-03-09 23:16:11
【问题描述】:
可以从shared_ptr<Deriver>(即shared_ptr<Base> ptr = make_shared<Derived>())复制或构造shared_ptr<Base>。但众所周知,模板类之间是不可转换的,即使模板参数是。那么shared_ptrs 如何检查他们的指针的值是否可转换,如果是则进行转换呢?
【问题讨论】:
-
如果您在谈论
shared_ptr的代码,那么 1- 因为我不知道如何找到它。 2-即使我确实找到了,阅读标准库代码也不是学习新编程技术的最佳方式。特别是对于像我这样的新人:) -
这就是 Template Magic Goo 的黑色艺术。如果您是新手,可能有点难以理解。如果你下定决心,最好的资源是尽可能多地学习 C++ 模板、泛型编程和元编程,并阅读 shared_ptr 和 make_shared 代码(因为模板代码就在其头文件中)。
-
我怀疑如果您只是编写代码以将内部指针存放在不同类型的模板类中,编译器会告诉您您是否犯了错误。如果内部指针兼容,那么编译器就可以了。
-
@Neil Butterworth。不是真的,我主要关心 shared_ptr 类如何相互转换。我使用
make_shared的唯一原因是我从用于测试此功能的代码中复制并粘贴了它。如果这会误导任何人关于问题的性质,我深表歉意 -
@ChrisDodd 我会说这更多是对虚函数返回类型的协方差的限制,而不是
shared_ptr。shared_ptr<Derived>可以“用作”shared_ptr<Base>这一事实是一种协方差。
标签: c++ inheritance polymorphism shared-ptr covariance