6

boost::shared_polymorphic_downcast在 boost 1.52.01.53.0之间消失。发行说明中没有提及此内容,提交 (r81463) 仅包含神秘的日志消息“更新 shared_ptr casts”。

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

编辑:感谢大家有见地的评论。我发现自己有点沮丧,因为 boost 会在没有任何理由或通知的情况下在发布中做出向后不兼容的更改,而且我还发现它们删除了有用的功能令人沮丧。但是根据回复,我可以用两行代码而不是一行代码来做我想做的事情,所以我认为这就足够了。尽管如此,我仍然“未回答”这个问题,因为没有人提供一种简单的方法来获得 ; 的旧行为boost::shared_polymorphic_downcast。也就是说,在dynamic_cast启用调试时使用 a ,在不启用调试时使用 a static_cast

4

1 回答 1

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可能是 rawBase*或 a std::shared_ptr<Base>,而无需我们编写案例。

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

于 2013-02-07T03:43:44.350 回答