C++ で cin や cout のストリーム元・先を入れ換える ― 2021年08月10日 12時46分48秒
例などを調べると、istream や ostream を受け取るように書かれていることが多いが、どちらも std::ios クラスから継承されている。汎用的なクラスを書く場合は ios で処理を書いた方が便利。
std::streambuf* ではなく、ios を受け取って、streambuf を内部的に取得した方が良いかも知れない。
#include <ios>
#include <iostream>
#include <ssstream>
class redirect_stream
{
public:
redirect_stream( std::streambuf* newbuf, std::ios& os )
: os_( os )
, oldbuf_( os.rdbuf( newbuf ) )
{}
~redirect_stream()
{
os_.rdbuf( oldbuf_ );
}
private:
std::ios& os_;
std::streambuf *oldbuf_;
};
int main()
{
std::stringstream in, out;
redirect_stream rin( in.rdbuf(), std::cin );
redirect_stream rout( out.rdbuf(), std::cout );
...
}
最近のコメント