从流中读取不可破坏的内容

时间:2009-08-05 00:29:46

标签: c++ io stream

是否可以尝试从流中读取但不更改流本身(并返回bool是否成功)?

template <typename T> bool SilentRead (stringstream& s, T& value) {
    stringstream tmp = s;
    tmp >> value;
    return tmp;
}

这不起作用,因为stringstream没有公共拷贝构造函数。 怎么办呢?

如果我们用istream替换stringstream,是否可以解决它?

3 个答案:

答案 0 :(得分:2)

一般来说,这是不可能的。底层streambuf没有接口。但是,您可以创建一个streambuf包装器。您仍然无法对流进行不可破坏的读取,但您可以在streambuf包装上执行这些操作。

(streambuf包装器是std :: streambuf接口的一个实现,它将I / O转发到底层的streambuf)

答案 1 :(得分:1)

StringStream,引用this允许您使用tellgseekg获取/设置位置。所以你可以:
 1.获取当前位置
 2.阅读
 3.将当前位置设置为刚刚读过的位置。

答案 2 :(得分:0)