C ++:CINをifstream変数に割り当てますか?
質問
あなたは一般的なstdioイディオムを知っています stdin
「 - 」のファイル名で指定されています。
if ((strcmp(fname, "-"))
fp = fopen(fname);
else
fp = stdin;
これを行うための最良の方法は何ですか ifstream
実例?あるコードを少し受け取りました ifstream
クラスの一部として、同等のことを行うためにコードを追加したいと思います。
if ( filename == "-")
logstream = cin; // **how do I do this*?*
else
logstream.open( filename.c_str() );
解決
cin
ではありません ifstream
, 、しかし、あなたが使用できるなら istream
代わりに、あなたは勝つためにいます。それ以外の場合は、あなたがポータブルではないように準備している場合は、ただ開いてください /dev/stdin
また /dev/fd/0
または何でも。 :-)
もし、あんたが 行う ポータブルになり、プログラムを使用させることができます istream
, 、ここにそれを行う1つの方法があります:
struct noop {
void operator()(...) const {}
};
// ...
shared_ptr<istream> input;
if (filename == "-")
input.reset(&cin, noop());
else
input.reset(new ifstream(filename.c_str()));
noop
で何もしない引き抜きを指定することです cin
ケース、なぜなら、まあ、 cin
削除することを意図していません。
他のヒント
- 初期を保存します CINのStreamBuf 変数に
- 変更 CINのStreamBuf に ファイルから1つ.
- あなたがする必要があることをしてください
- また、ファイルを閉じる前にCin Streambufを復元することを忘れないでください。Raiiが役立つ場合があります。
所属していません StackOverflow