将Ostream传递到Istream

Pass Ostream into Istream

本文关键字:Istream Ostream      更新时间:2023-10-16

我有一个函数将数据输出到ostream对象中,还有一个构造函数,它以完全相同的格式从istream对象初始化类。

std::ostream& operator<<(std::ostream &os, const Matrix &m) {
    // Output to os
}

然后

Matrix::Matrix(std::istream& in) {
    // Read from in to construct the object
}

那么如何将第一个函数的输出推送到第二个函数的输入呢?我尝试了很多东西,主要是反复试验,但完全迷失了(即甚至不确定要使用哪种流类型)。谢谢

由于您同时需要输入和输出,因此您需要继承std::istreamstd::ostreamstd::iostream 导数。听起来您想使用内存缓冲区,而不是文件缓冲区,因此类型 std::stringstream 的对象可以解决问题。在将其用于输入之前,请务必调用stream.seekg(0, std::ios::beg)将流"倒带"回开头。

此代码也可以重用于文件 I/O,只需将std::fstream传递给相应的函数即可。但是,由于写作和阅读将分开,std::ofstreamstd::ifstream可能是更好的选择。