boost::shared_polymorphic_downcast
在提升1.52.0和1.53.0之间消失了。在release notes中没有提到这一点,并且提交(r81463)仅包含神秘的日志消息“Update shared_ptr casts。”
我不清楚我现在应该使用什么,或者为什么删除此功能。有人可以帮忙吗?
编辑:感谢大家的深刻见解。我发现自己有点沮丧,提升会在没有任何理由或通知的情况下在版本中进行向后兼容的更改,我也发现它们删除了有用的功能令人沮丧。但根据回复,我可以用两行代码而不是一行来做我想要的,所以我认为这就足够了。尽管如此,我仍然没有回答这个问题,因为没有人提供一种简单的方法来获得boost::shared_polymorphic_downcast
的旧行为;也就是说,在启用调试时使用dynamic_cast
,而在启用调试时使用static_cast
。
答案 0 :(得分:10)
使用boost::dynamic_pointer_cast
。
它所讨论的更新是为了匹配C ++ 11的设计。在C ++ 11中,指针强制转换被概括为函数std::dynamic_pointer_cast
(和朋友)以允许我们编写:
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 ++。