提问人:Peyman 提问时间:9/21/2018 最后编辑:Peyman 更新时间:9/21/2018 访问量:252
如何在抽象类中使用流
How to use streams in abstract classes
问:
这似乎是一个意见问题,但我真的在寻找一些好方法来做到这一点。那这是什么?我基本上想要一个名为 us-say 的抽象类。这个类将定义一个应该能够做什么的抽象。在这种情况下,我只想能够保存一些东西,比如说你提供了一个名字和数据,它应该为你存储它。然后,我们可以将它们保存在光盘上,例如将它们存储在 AWS S3 中,甚至将它们保存在内存中。Repo
Repo
FileRepository
S3Repository
MemoryRepository
太好了,但是我该如何抽象出来呢?显然我可以获取字节,并且每个派生类都会使用自己的流来保存它,但是如果数据很大并且我们不想将其加载到内存中怎么办?假设我们想保存一个 5GB 的文件,我们不想将其加载到内存中。
我查看了适用于 C++ 的 AWS 开发工具包,似乎他们采用了带有 ostream 的 lambda,因此您可以编写内容。我试图在这里模仿类似的东西,这样你就可以直接传递你的 ,或者给出一个 lambda 来做一个它心里想做的任何事情。istream
ostream
只是想知道是否有更好的方法?在 C++ 中通常很难找到好的实践,因为有十亿种方法可以做同样的事情,而许多人做事的方式却截然不同。我只是想在这里获得一些见解。我对C++相当陌生,所以一个好的解释将不胜感激。
class Repo {
public:
virtual void add_with_ostream(const string& name, const std::function<void (ostream&)>& f) = 0;
template<typename T>
void add(const string& name, const T& data) {
this->add_with_ostream(name, [&data](ostream& output_stream) {
output_stream << data;
});
}
virtual void add_with_istream(const string&name, const istream& input_stream) {
this->add_with_ostream(name, [&input_stream](ostream& output_stream) {
output_stream << input_stream.rdbuf();
});
}
};
答: 暂无答案
下一个:C++ 流打开模式组合
评论
FileRepository
MemoryRepository
Repo
FileRepository
std::ostream
ostream
FileRepository
add_with_ostream
ostream
MemoryRepo
add_with_ostream