我有一个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界面的最低限度。如果需要,可以添加缓冲区管理代码以提高性能。

09-12 09:32