我有三个班级成员:
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;
当我以m_objects
的{{1}}版本返回const
时遇到编译器错误,因为getObjects()
与返回类型不匹配({{1} }。
在解决方法中,我首先通过迭代在局部重建对象向量,然后返回局部向量,但是有没有更优化的方式来处理这种情况?
m_objects
答案 0 :(得分:1)
您不能从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
方法相比)。