Lobe
Lobe

Reputation: 538

Pass Ostream into Istream

I have one function that outputs data into an ostream object, and a constructor that initializes a class from an istream object in the exact same format. i.e

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

and then

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

so how do I push the output of the first function to the input of the second? I have tried a lot of things, mostly trial and error, but am completely lost (i.e not even sure what stream type to use). Thanks

Upvotes: 4

Views: 5841

Answers (1)

Potatoswatter
Potatoswatter

Reputation: 137770

Since you need both input and output, you need a derivative of std::iostream which inherits both std::istream and std::ostream. It sounds like you want to use a memory buffer, not a file buffer, so an object of type std::stringstream would do the trick. Just be sure to call stream.seekg(0, std::ios::beg) to "rewind" the stream back to the beginning before using it for input.

This code could also be reused for file I/O, simply by passing std::fstream instead to the respective functions. But since writing and reading would then be separated, std::ofstream and std::ifstream might be better choices.

Upvotes: 7

Related Questions