我有一个包含以下函数的迭代器:
...
T &operator*() { return *_i; }
std::shared_ptr<T> operator->() { return _i; }
private:
std::shared_ptr<T> _i;
...
如何获得内部存储的_i?
的共享指针std::shared_ptr<Type> item = ???
我应该这样做:
MyInterfaceIterator<Type> i;
std::shared_ptr<Type> item = i.operator->();
或者我应该重写operator *()?
答案 0 :(得分:2)
如果你可以编辑代码,你可以添加一个返回内部get
的简单shared_ptr
函数!这比直接调用operator->
更好,不是吗?
答案 1 :(得分:1)
就迭代器而言,您必须编写operator*()
来取消引用它。实际上它是你的迭代器,你可以写任何你想要的东西。但是,由于C ++程序员广泛使用std
,如果你使用operator*()
会更好,因为它更清楚地理解。
答案 2 :(得分:1)
由于std
通过解引用迭代器来获取对象,我说:
std::shared_ptr<T> operator*() { return _i; }
另请注意,如果您只是尝试在T
上调用方法,则不需要先获取指针,因为operator->()
正在进行链接。这意味着
it->foo();
即使T::foo()
返回共享的poitner,也会调用it.operator->()
。
答案 3 :(得分:0)
这个解决方案怎么样?
std::shared_ptr<T> operator()(){...}