我有一个istream,有些代码希望有一个wistream。
我确实希望源流的每个char零都扩展为wchar_t。我不在乎代码页,我不在乎本地化,我只想无缝地管道传输此输入,最快的方法是什么?
最佳答案
您可以编写一个读取缓冲区,以使istream
中的基础流缓冲区适应您的wistream
:
class adapting_wistreambuf : public wstreambuf {
streambuf *parent;
public:
adapting_istreambuf(streambuf *parent_) : parent(parent_) { }
int_type underflow() {
return (int_type)parent->snextc();
}
};
后来:
istream &somestream = ...;
adapting_wistreambuf sb(somestream.rdbuf());
wistream wistream(&sb);
// now work with wistream
这仅实现了streambuf界面的最低限度。如果需要,可以添加缓冲区管理代码以提高性能。