如何检查dynamic_cast从函数返回时是否成功?



我有一个类,它持有一个向量的unique_ptrs,这个类是为我简化多态性。我试图使一个函数将基类型转换为派生类型,但我无法弄清楚如何传递回一个值,然后我可以检查以确保它已经工作(类似于if(dynamic_cast<>()…)

template <typename T>
class Vector_UniquePtrs {
public:
template<typename U>
U& DynamicCast(size_t i) { 
return dynamic_cast<U&>(*m_Items[i]); 
}
private:
std::vector<std::unique_ptr<T>> m_Items;
}

Vector_UniquePtrs<Base> v;
if(auto a = v.DynamicCast<Derived>(0)) { // want to do something along these lines
// success
} else {
// fail
}

实现这一点的好方法是什么?由于

如果你愿意返回一个指针,那么你可以做

if(auto* a = v.DynamicCast<Derived>(0); a)

或更长的显式版本

if(auto* a = v.DynamicCast<Derived>(0); a!=nullptr)

相关内容

  • 没有找到相关文章

最新更新