有人可以向我解释一下之间的区别:
来自Boost库的 shared_dynamic_cast
和dynamic_pointer_cast
?
在我看来,它们可能是等同的。
答案 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
。)
(当然,其他演员变体的想法也是一样。)