在C++0x中,std::shared_ptr有一个std::static_pointer_cast方法,但是std::weak_ptr没有类似的方法。这是有意为之,还是一个疏忽呢?如果是疏忽,我该如何定义一个合适的函数呢?
这应该能解决你的问题:
template<class T, class U>
std::weak_ptr<T>
static_pointer_cast(std::weak_ptr<U> const& r)
{
return std::static_pointer_cast<T>(std::shared_ptr<U>(r));
}
r.lock()
代替。std::weak_ptr<A> a = ...;
std::weak_ptr<B> b = std::static_pointer_cast<B>(a.lock());
这种语法明确地显示了正在发生的事情,并使代码易于阅读。
static_pointer_cast
旨在成为通用名称,在指针类型是通用的代码中使用。 - Howard Hinnant