2

次の関数を含むイテレータがあります。

    ...
    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

4 に答える 4

2

コードを編集できる場合はget、内部を返す単純な関数を追加できますshared_ptr!! 直接電話operator->するよりはましですね。

于 2012-10-11T09:32:31.593 に答える
1

イテレータに関しては、逆参照するために記述 operator*()する必要があります。実際にはそれはあなたのイテレータであり、あなたはあなたが望むものを何でも書くことができます。ただし、C ++プログラマーはstd広く使用してoperator*()いるため、理解しやすいため、使用する方が適切です。

于 2012-10-11T09:34:18.110 に答える
1

はイテレータを間接参照してオブジェクトを取得しているので、次のstdように言います。

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

また、でメソッドを呼び出そうとしているだけの場合は、チェーンTであるため、最初にポインタを取得する必要がないことに注意してください。operator->()つまり、

it->foo();

共有poitnerを返しますT::foo()が呼び出します。it.operator->()

于 2012-10-11T09:38:51.023 に答える
0

このソリューションはどうですか?

std::shared_ptr<T> operator()(){...}  
于 2012-10-11T09:39:53.417 に答える