我有有std::shared_ptr
秒的私人收藏,像類派生:從標準容器的迭代器
class Foo
{
private:
using Bars = std::vector<std::shared_ptr<Bar>>;
Bars items_;
}
鑑於Foo
一個例子,我希望能夠直接遍歷Bar
對象items_
- 隱藏該集合實際上包含指針。我相信唯一需要從Bars::const_iterator
更改的是operator*
,可以從它推導出來並執行operator*
?即
class Iterator : public Bars::const_iterator
{
public:
Iterator(Bars::const_iterator it) : Bars::const_iterator {it} {}
const string& operator*() const
{
return *Bars::const_iterator::operator*();
}
};
然後換Foo
提供begin
和end
方法:
Foo::Iterator Foo::begin() const noexcept { return Iterator {std::cbegin(items_)}; }
Foo::Iterator Foo::end() const noexcept { return Iterator {std::cend(items_)}; }
只要繼承是私有的,就可以從幾乎任何類中安全地派生出來。您需要使用'聲明來重新導出您想要訪問的成員。 –