我无法解决这个问题.假设我有这个向量
std::vector<std::shared_ptr<Car>> cars;
Run Code Online (Sandbox Code Playgroud)
汽车是一个抽象的类.我希望能够返回不同类型的弱指针,所以我执行以下操作.
template<typename T>
std::weak_ptr<T> GetCar()
{
for (std::vector<std::shared_ptr<Car>>::iterator it = cars.begin(); it != cars.end(); ++it)
{
T* derived = dynamic_cast<T*>((*it).get());
if (derived != nullptr)
{
std::weak_ptr<T> carPointer = *it;
return carPointer;
}
}
return std::weak_ptr<T>();
}
Run Code Online (Sandbox Code Playgroud)
当我尝试将该函数与继承自Car的类一起使用时,我收到以下错误.
Error C2440 'initializing': cannot convert from 'std::shared_ptr<Car>' to 'std::weak_ptr<Saab>'
被要求时可能没有有效的汽车.我尝试使用boost :: optional但它不处理多态.如果我不能使用它,我可能会使用原始指针.