3

実行時にプログラムに渡されるパラメーターに応じて、ifstream または cin から読み込むプログラムを作成する必要があります。

私は次のことを計画していました:

 istream in;

 if(argv[1] == "cin")
 {
      in = cin;
 }
 else
 {
      ifStream inFile;
      inFile.open(argv[1].c_str());
      in = inFile;
 }

ただし、istream は保護されており、istream を宣言することはできません。そのようなジェネリックをストリームで宣言する方法はありますか?

4

3 に答える 3

3

istream*代わりにを試してください。ただし、コードを少し変更する必要があることに注意してください。ポインタを使用すると、指しているオブジェクトのメモリ領域を保持する必要があります。つまり、「inFile」変数は、else の外には存在しないため、そこで宣言することはできません。コードは次のようになります。

 istream* in;
 ifStream inFile;

 if(!strcmp(argv[1],"cin"))
 {
      in = &cin;
 }
 else
 {
      inFile.open(argv[1]);
      in = &inFile;
 }
 // use *in

(文字列処理の変更にも注意してください。例として変更しました。)

于 2010-02-07T23:08:04.483 に答える