我有一个 istream,一些代码需要一个 wistream。
我确实希望将源流的每个字符零扩展为 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 接口(interface)的最低限度。如果需要,您可以添加缓冲区管理代码以提高性能。
关于c++ - 如何将 std::istream 转换为 std::wistream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7623403/