boost :: shared_polymorphic_downcast在boost
1.52.0和
1.53.0之间消失.在
release notes中没有提到任何内容,并且commit(r81463)仅包含神秘的日志消息“Update shared_ptr casts”.
我不清楚我现在应该使用什么,或者为什么删除此功能.有人可以帮忙吗?
编辑:感谢大家的见解.我发现自己有点沮丧,提升会在没有任何理由或通知的情况下在版本中进行向后兼容的更改,我也发现它们删除了有用的功能令人沮丧.但根据回复,我可以用两行代码而不是一行来做我想要的,所以我认为这就足够了.尽管如此,我仍然没有回答这个问题,因为没有人提供一种简单的方法来获得boost :: shared_polymorphic_downcast的旧行为;也就是说,在启用调试时使用dynamic_cast,而在不启用static_cast时使用static_cast.
解决方法
使用boost :: dynamic_pointer_cast.
它所讨论的更新是为了匹配C 11的设计.在C 11中,指针强制转换为函数std :: dynamic_pointer_cast(和friends)以允许我们编写:
template <typename PointerToBase> // models Base* in some way void foo(PointerToBase ptr) { auto ptrToDerived = std::dynamic_pointer_cast<Derived>(ptr); }
因此,PointerToBase可以是原始Base *或std :: shared_ptr< Base>,而无需我们编写案例.
Boost当然只想尽可能地匹配C.