我有一個基類(Container
),它擁有std::unique_ptr<Base>
矢量中的每種對象(Base
項),並且我有一個派生類(FolderOfFolders
),它只保存特定項目(Folder
項目)。我想使用基於範圍的for來遍歷該特定對象(FolderOfFolder
),但我不知道該怎麼做。隨着範圍爲基礎,我可以得到std::unique_ptr<Base>
項目,但我想const Folder*
的。我知道我需要一個begin(),end()對來提供基於範圍的迭代器for,但是我需要從std::unique_ptr<Base>
到const Folder*
。這可能以某種方式嗎?如何從unique_ptr <Base>的向量中獲取派生迭代器?
class Container : public Base {
public:
// I want to get back these as Folder* from FolderOfFolders
std::vector<std::unique_ptr<Base>> items;
};
class Folder : public Container {
public:
// I want to call this when I traverse FolderOfFolders with range-based-for
void folderMethod();
...
};
class SystemFolder : public Folder {
public:
...
};
class UserFolder : public Folder {
public:
...
};
class FolderOfFolders : public Folder {
public:
// I know that every item is a Folder in items
// can I get an iterator to a Folder* ?!
iterator begin() {
// ???
return items.begin();
}
iterator end() {
// ???
return items.end();
}
};
我想用它作爲
FolderOfFolders folderOfFolders;
for (folder : folderOfFolders)
folder->folderMethod();
你是說,你要確保指針類型的文件夾*的''或只得到來自迭代器的'const Folder *'? – imreal
在我看來,你需要創建自己的自定義迭代器,它用不同的返回類型來包裝向量迭代器。 – IdeaHat
如果你聲明「Folder :: folderMethod()'和'items',你的問題會更清楚。和'基地'。 –