shared_dynamic_cast和dynamic_pointer_cast之间的区别

时间:2012-02-22 09:08:50

标签: c++ boost c++11

有人可以向我解释一下之间的区别:

来自Boost库的

shared_dynamic_castdynamic_pointer_cast

在我看来,它们可能是等同的。

1 个答案:

答案 0 :(得分:27)

给定shared_ptr<T>,这两个函数确实是等价的。

区别在于shared_dynamic_cast 适用于shared_ptr<>,而dynamic_pointer_cast适用于任何类型的指针(通过重载)。这使您可以对任何指针 concept 执行动态强制转换,无论指针实际组成的方式如何:

#include <boost/pointer_cast.hpp>
#include <boost/shared_ptr.hpp>

struct foo {};
struct bar : foo { void f(){} };

template <typename Ptr>
void test(Ptr ptr)
{
    boost::dynamic_pointer_cast<bar>(ptr)->f();
}

int main()
{
    bar b;
    foo* pf = &b;

    std::shared_ptr<foo> spf(new bar());

    test(pf); // turns into dynamic_cast<bar*>(pf)->f();
    test(spf); // turns into shared_dynamic_cast<bar>(pf)->f();
}

由于dynamic_pointer_cast具有shared_dynamic_cast及更多功能,后一功能已弃用。 (同样在C ++ 11中,只存在dynamic_pointer_cast。)

(当然,其他演员变体的想法也是一样。)