将 std::vector<std::shared_ptr<T>> 转换为 std::vector<std::shared_ptr<const T>>



我有三个类成员:

public:
    std::vector<std::shared_ptr<Object> > getObjects();
    std::vector<std::shared_ptr<const Object> > getObjects() const;
private:
    std::vector<std::shared_ptr<Object> > m_objects;

当我在getObjects()const版本中返回m_objects时,我收到编译器错误,因为m_objects与返回类型(std::vector<std::shared_ptr<const Object>>(不匹配。

在我的解决方法中,我首先通过迭代在本地重建对象向量,然后返回局部向量,但是有没有更优化的方法来处理这种情况?

std::vector<std::shared_ptr<const Object> > objects;
for (auto & object: m_objects)
{
    objects.push_back(object);
}
return objects;
你不能

std::vector<std::shared_ptr<T>>投射到std::vector<std::shared_ptr<const T>>,即使reinterpret_cast会产生未定义的行为。有关详细信息,相关问题cast vector<T> to vector<const T>可能会有所帮助。

创建副本是你能做的最好的事情。但是,正如弗兰克指出的那样,它可以写得更简洁,如return {m_objects.begin(), m_objects.end()}。这也避免了一些不必要的分配,因为最终容器的大小是立即知道的(与push_back方法相反(。

相关内容

  • 没有找到相关文章

最新更新