2012-10-11 65 views
2

輸入迭代我有一個包含以下功能的迭代器:爲一個shared_ptr

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

我最後一個例子中的變量是什麼類型? –

+0

@Denis Ermolin更新了我的問題。 – Baz

回答

2

如果您可以編輯代碼,您可以添加一個簡單的get函數,返回內部shared_ptr!這比直接致電operator->好,不是嗎?

1

在迭代器方面,您必須編寫operator*()來取消引用它。其實這是你的迭代器,你可以寫任何你想要的東西。但是由於C++程序員廣泛使用std,所以如果您使用operator*()更好,因爲它更清楚理解。

1

由於std被提領該迭代獲取對象,我會說:

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

另請注意,如果你只是想呼籲T方法,你不需要首先得到指針,因爲operator->()正在鏈接。這意味着,

it->foo(); 

將調用T::foo()即使it.operator->()收益共享poitner。

+0

你能解決你的答案的第一行嗎?它看起來像在那裏缺少一些文字。 – Baz

+0

@Baz我沒有看到任何文字丟失。你有什麼想法? –

+0

「std」是什麼意思? – Baz

0

這種解決方案呢?

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

嗯,你回答這個問題就像你是另一個人) –

+0

我可以有我的問題的解決方案也... – Baz

+0

編輯後它看起來不奇怪) –