我有一个类,它持有一个向量的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)