【发布时间】:2019-10-20 06:14:14
【问题描述】:
我有三个班级成员:
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;
当我在const 版本的getObjects() 中返回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;
【问题讨论】:
-
恐怕不行。这些是不相关的类型。
-
好的,但是我想局部变量的内容不会被复制而是在将变量分配给getObjects()的情况下移动,例如auto objects = objectManager->getObject();,其中objectManager 是一个 const 指针。
-
一种解决方案是不返回
vector,而是将类本身设为into a container。请注意,这可能会背叛课程的意图并使事情变得过于复杂。 -
简单的
return {m_objects.begin(), m_objects.end()};怎么样?
标签: c++ c++11 casting smart-pointers