小编min*_*nco的帖子

从shared_ptr转换为weak_ptr多态

我无法解决这个问题.假设我有这个向量

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但它不处理多态.如果我不能使用它,我可能会使用原始指针.

c++ boost smart-pointers

5
推荐指数
1
解决办法
2174
查看次数

标签 统计

boost ×1

c++ ×1

smart-pointers ×1