有人可以向我解释一下:
Boost库中的shared_dynamic_cast
和dynamic_pointer_cast
?
在我看来,它们可能是等效的。
最佳答案
给定shared_ptr<T>
,这两个函数确实等效。
不同之处在于shared_dynamic_cast
仅适用于shared_ptr<>
,而dynamic_pointer_cast
适用于任何类型的指针(通过重载)。这使您可以对任何指针概念执行动态强制转换,而不管该指针的实际组成如何:
#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
。)(当然,其他转换类型的想法也相同。)
关于c++ - shared_dynamic_cast和dynamic_pointer_cast之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9391863/