输入Iterator为shared_ptr

时间:2012-10-11 09:24:19

标签: c++

我有一个包含以下函数的迭代器:

    ...
    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 *()?

4 个答案:

答案 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()(){...}