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 );
...
}
コメント
トラックバック
このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2021/08/10/9407765/tb
※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。
コメントをどうぞ
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※なお、送られたコメントはブログの管理者が確認するまで公開されません。