【发布时间】:2018-09-12 23:07:26
【问题描述】:
我有两个看起来像这样的对象:
class Object
{
};
class List
{
public:
std::vector<std::shared_ptr<Object>> list;
};
我希望能够像这样创建一个基于范围的循环:
for (Object& object : list) {
//...
}
为此我创建了 begin() 和 end() 成员:
class List
{
public:
std::vector<std::shared_ptr<Object>> list;
Object& begin() { return *list.begin()->get(); }
const Object& begin() const { return *list.begin()->get(); }
Object& end() { return *list.end()->get(); }
const Object& end() const { return *list.end()->get(); }
};
但是 IDE 现在要求我提供运算符 *、++ 和 !=,我不明白我应该如何实现,我能得到一些帮助吗?
【问题讨论】:
-
您没有提供有意义的
begin和end。它们应该返回迭代器,而不是对象。此外,取消引用end迭代器是 UB,但您不需要那段代码。 -
@LogicStuff 那么我如何将 shared_ptr 转换为参考?
-
@Dolfos 您需要为
List编写一个迭代器类型。尝试将您的shared_ptrs 转换为引用而不是使用迭代器类型是错误的。