2009-08-05 45 views
0

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

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

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

如果我们用istream替换stringstream,可以解决吗?

回答

1

字符串流,指的this允许你使用tellgseekg获取/设置位置。所以你可以:
1.获取当前位置
2.阅读
3.设置当前位置为一个,你刚刚阅读。

+1

当然不适用于所有流。 – MSalters 2009-08-05 07:57:01

+0

当然:)。我是严格引用std :: stringstream(也适用于普通文件上的流)。 – 2009-08-05 13:36:13

2

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

(A流缓冲包装是STD的一个实现::流缓冲接口,其I/O转发到下面的流缓冲)