注意:根据回复进行编辑以获得更合适的答案。
我有一组多年来制作的 C++ 模板,我称之为 Joop。它主要包含不完全属于“通用”类别但足够有用的库,以至于我不断地将它们拍打到不同的项目中,因此它们中的大多数在其他库中没有等价物,例如 Boost。
其中一类是seqstream
. 这个想法是它允许您将任何可迭代序列视为普通的类似 STL 的流,其“字符类型”是序列的值类型。
这个类的基本原理是双重的。首先,它应该提供一个界面,使任何潜在的非线性、非连续序列看起来是线性和连续的;其次,它应该将流中的任何对象视为一个单一的、复杂的、大字符。有一种将流视为序列的标准方法,那么为什么不反过来呢?
目前,seqstream
为第一个、最后一个和当前元素包装了三个迭代器。我想seqstream
用basic_seqbuf
可以插入标准流的替换。谁能提供资源让我开始扩展std::basic_streambuf
以提供这种行为?
此外,如果seqbuf
允许可写,则将对象写入 很可能不会seqbuf
序列化对象,而是对方法进行适当的调用或使用用户指定的插入迭代器,例如.insert()
std::back_insert_iterator
编辑:
seqstream
以下是当前使用方式的示例:
// Create a sequence of objects.
std::vector<std::string> sequence;
for (int i = 0; i < 10; ++i) {
std::ostringstream stream;
stream << "Element " << i << ".";
sequence.push_back(stream.str());
}
// Create a seqstream wrapping that sequence.
joop::seqstream< std::vector<std::string> > seqstream(sequence.begin(), sequence.end());
// Read the sequence like a stream.
std::string element;
while (seqstream >> element) // OR seqstream.get(element)
std::cout << element << '\n';