我有下面的類:自定義迭代器指向一個臨時對象(延遲加載)
template <class T>
class IReader
{
using const_iterator = std::vector<filesystem::Path>::const_iterator;
public:
virtual ~IReader() = default;
virtual T read(const_iterator path) const = 0;
virtual const_iterator begin() const = 0;
virtual const_iterator end() const = 0;
virtual size_t size() const = 0;
};
這是應該提供文件的延遲加載的界面。該類的實現將獲得可讀路徑列表並按需讀取文件。此類的實施例一使用情況如下:
Reader reader; // Reader implements IReader
for(auto path : reader)
{
auto decodedFile = reader.read(path);
imshow(decodedFile);
}
然而,這看起來有點怪 - 由於這一類我不需要知道什麼文件名而言,專賣店的用戶。這將是方便多了,如果我如下可以使用這個類:
Reader reader; // Reader implements IReader
for(auto file : reader)
{
imshow(*file);
}
是否有可能在所有的C++設計的iReader類這樣的方式,這將是迭代像在過去的代碼片段?
是的,這是可能的,但你必須真正創建自己的自定義迭代器,它是一個實際的文件,而不是一個路徑。也許你應該仔細查看一下設計,以獲得某種「ReaderContainer」,其中包含(未打開的)文件集合,並且取消引用自定義迭代器打開該文件(如果尚未打開)? –
創建某種簡單的懶惰資源類將是最簡單的。然後你可以很容易地創建一個容器('std :: vector'等),或者用它來構建一個自定義的迭代器/容器來滿足你的需求。一次解決一個問題。 –