C++ 共享\u ptr的输入迭代器

C++ 共享\u ptr的输入迭代器,c++,C++,我有一个迭代器,它包含以下函数: ... T &operator*() { return *_i; } std::shared_ptr<T> operator->() { return _i; } private: std::shared_ptr<T> _i; ... 。。。 T&运算符*(){return*_i;} std::shared_ptr操作符->(){return_i;} 私人: std::共享的ptr

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

    ...
    T &operator*() { return *_i; }
    std::shared_ptr<T> operator->() { return _i; }

private:
    std::shared_ptr<T> _i;
    ...
。。。
T&运算符*(){return*_i;}
std::shared_ptr操作符->(){return_i;}
私人:
std::共享的ptr_i;
...
如何获取指向内部存储的\u I的共享指针

std::shared_ptr<Type> item = ???
std::共享的ptr项目=???
我应该做:

MyInterfaceIterator<Type> i;
std::shared_ptr<Type> item = i.operator->();
MyInterfaceIterator i;
std::shared_ptr item=i.operator->();

或者我应该重写操作符*()?

如果你可以编辑代码,你可以添加一个简单的
get
函数,返回内部
共享的ptr
!!这比直接调用
操作员->
要好,不是吗???

如果您可以编辑代码,您可以添加一个简单的
get
函数,返回内部
共享\u ptr
!!这比直接调用
操作符->
要好,不是吗???

就迭代器而言,您必须编写
操作符*()
来取消引用它。实际上它是你的迭代器,你可以写任何你想写的东西。但是由于C++程序员广泛使用<代码> STD<代码>,所以如果使用代码> >运算符*()/>代码,则更好。因为它更清楚地理解。

< P>在迭代器方面,你必须编写<代码>运算符*()< /COD>来引用它。实际上它是你的迭代器,你可以写任何你想写的东西。但是由于C++程序员广泛使用<代码> STD<代码>,如果你使用<代码>运算符*()更好,因为它更清楚地理解。

< P>由于<代码> STD 通过取消迭代器得到对象,我会说:

std::shared_ptr<T> operator*() { return _i; }

将调用
T::foo()
,即使
it.operator->()
返回一个共享的poitner。

由于
std
通过取消引用迭代器来获取对象,我想说:

std::shared_ptr<T> operator*() { return _i; }

将调用
T::foo()
,即使
it.operator->()
返回一个共享的poitner。

这个解决方案怎么样

std::shared_ptr<T> operator()(){...}  
std::shared_ptr operator()(){…}

这个解决方案怎么样

std::shared_ptr<T> operator()(){...}  
std::shared_ptr operator()(){…}

在您的上一个示例中,i变量是什么类型?@Denis Ermolin更新了我的问题。在您的上一个示例中,i变量是什么类型?@Denis Ermolin更新了我的问题。嗯,您在这个问题上的回答就像您是另一个人一样)@Luksprog这是一个完整的答案。好还是坏是另一个问题…:)这可能是一个答案,但它看起来不像一个(回答一个问题不是答案)。如果你在问题中问我应该做什么:……还是。。。你本可以把这个答案作为备选答案之一包含在问题中。嗯,你在这个问题上的回答就像你是另一个人一样。)@Luksprog这是一个完整的答案。好还是坏是另一个问题…:)这可能是一个答案,但它看起来不像一个(回答一个问题不是答案)。如果你在问题中问我应该做什么:……还是。。。你可以将这个答案作为备选答案之一包含在问题中。请你修改一下答案的第一行。看起来有一些文本丢失了。@Baz我没有看到任何文本丢失。你在想什么?你所说的“性病”是什么意思?请你把答案的第一行改一下好吗。看起来有一些文本丢失了。@Baz我没有看到任何文本丢失。你在想什么?你说的“性病”是什么意思?