我正在编写一个 C++ 库来解析 WARC 文件,它包含用于存储 WARC 记录和字段数据的类以及用于从某些输入流中读取数据的运算符。它operator>>
可以从 a 中读取istream
并填充WARCRecord
对象。我能够从istream
流中读取并将其解析为WARCRecord
对象。但是,我想使用 aistream_iterator
从输入流中读取所有 WARC 记录。
当我使用istream_iterator
迭代直到流结束时,我operator>>
收到了上次调用的相同(复制?)对象。这是预期的行为还是我的类定义中缺少一些运算符/构造函数?
这是用于检查此行为的单元测试的存储库链接:https ://github.com/jvanz/libwarc
一个简单的例子来演示上面的文本:
#include <iostream>
#include <istream>
#include <sstream>
#include <vector>
#include <iterator>
class MyClass
{
public:
std::vector<unsigned int> fields;
friend std::istream& operator>> (std::istream& is, MyClass& obj);
};
std::istream& operator>> (std::istream& is, MyClass& obj){
std::istream::sentry s(is);
if (s) {
for (unsigned i = 0; i < 3; i++) {
unsigned f;
is >> f;
obj.fields.push_back(f);
}
}
return is;
}
int main(void)
{
std::stringstream ss;
ss << 1 << " " << 2 << " " << 3 << " " << 4 << " " << 5 << " " << 6;
std::istream_iterator<MyClass> it(ss);
std::cout << it->fields.size() << std::endl;
it++;
std::cout << it->fields.size() << std::endl;
return 0;
}
这个程序的输出是:
$ ./a.out
3
6
注意对象fields
成员大小的累积MyClass