質問

あなたは一般的な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が役立つ場合があります。
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top