C++ boost::shared_多态性_downcast在boost 1.53.0中消失了。我应该用什么来代替?

C++ boost::shared_多态性_downcast在boost 1.53.0中消失了。我应该用什么来代替?,c++,boost,shared-ptr,C++,Boost,Shared Ptr,boost::shared_polymorphic_downcast在boost和boost之间消失。中没有提到这一点,提交(r81463)只包含神秘的日志消息“updateshared_ptr casts” 我不清楚我现在应该使用什么,或者为什么要删除这个功能。有人能帮忙吗 编辑:谢谢大家的有见地的评论。boost会在没有任何理由或通知的情况下在版本中进行向后不兼容的更改,这让我感到有点沮丧,我还发现它们删除了有用的特性,这让我感到沮丧。但是根据回答,我可以用两行代码而不是一行代码来做我想做的

boost::shared_polymorphic_downcast
在boost和boost之间消失。中没有提到这一点,提交(r81463)只包含神秘的日志消息“updateshared_ptr casts”

我不清楚我现在应该使用什么,或者为什么要删除这个功能。有人能帮忙吗


编辑:谢谢大家的有见地的评论。boost会在没有任何理由或通知的情况下在版本中进行向后不兼容的更改,这让我感到有点沮丧,我还发现它们删除了有用的特性,这让我感到沮丧。但是根据回答,我可以用两行代码而不是一行代码来做我想做的事情,所以我认为这就足够了。尽管如此,我还是没有回答这个问题,因为没有人能提供一种简单的方法来获得
boost::shared_polymorphic_downcast
;也就是说,在启用调试时使用
动态\u cast
,在未启用调试时使用
静态\u cast

使用
boost::动态\u指针\u 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);
}
template//models Base*以某种方式
void foo(指针数据库ptr)
{
自动ptr派生=标准::动态指针转换(ptr);
}
因此,
PointerToBase
可以是原始的
Base*
std::shared\u ptr
,而无需我们编写案例


Boost当然只想尽可能地匹配C++。

不>代码> Boo::DyrimePoTythOngase适合您的需求?<代码> Boo::DyrimiSoPoTythOrthCase<代码>将执行动态映射,但是
boost::shared_polymorphic_downcast
还有一个额外的好处,那就是断言动态转换实际上成功了。@JimGarrison:
dynamic_pointer_cast
;如果失败,它将返回一个null
shared\u ptr
。就像
dynamic\u cast
@nicolas返回null
shared\u ptr
与断言失败不同。@JimGarrison:Asserts仅在调试中失败。这种方式迫使您始终测试结果。