有人可以向我解释一下之间的区别:
shared_dynamic_cast并dynamic_pointer_cast从Boost库?
在我看来,它们可能是等同的.
GMa*_*ckG 27
给定a shared_ptr<T>,这两个函数确实是等价的.
不同之处在于,shared_dynamic_cast 它只适用于shared_ptr<>'s,同时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();
}
Run Code Online (Sandbox Code Playgroud)
由于dynamic_pointer_cast具有更多的能力shared_dynamic_cast,后一种功能已被弃用.(同样在C++ 11中,只存在dynamic_pointer_cast.)
(当然,其他演员变体的想法也是一样的.)
| 归档时间: |
|
| 查看次数: |
10425 次 |
| 最近记录: |