c。で、汎用のIStreamを宣言++
質問
私は、実行時にプログラムに渡されたパラメータに応じて、どちらかではifstreamまたはCINから読み取るプログラムを作成する必要があります。
私は次のことを行う上で計画していた。
istream in;
if(argv[1] == "cin")
{
in = cin;
}
else
{
ifStream inFile;
inFile.open(argv[1].c_str());
in = inFile;
}
ただし、保護された、と私はではistreamを宣言することができないではistreamはストリーム内で、このようなジェネリックを宣言するための方法はありますか?
解決
の代わりにistream*
で試してみてください。あなたは少し自分のコードを変更する必要があること、しかし、注意してください。ポインタを使用すると、あなたが指しているオブジェクトのメモリ領域を維持する必要があります。それは他の外に存在しないので、他の言葉で、「INFILE」変数は、そこに宣言することはできません。コードは、可能性があります:
istream* in;
ifStream inFile;
if(!strcmp(argv[1],"cin"))
{
in = &cin;
}
else
{
inFile.open(argv[1]);
in = &inFile;
}
// use *in
(注意も取り扱いストリングに変更。私は、例として、それらを改変した。)
他のヒント
代替設計はcin
を使用してコードを記述し、その後、入力のリダイレクトを使用することですA>あなたはファイルからの入力を受け付けるようにしたい場合は、プログラムを実行するとき。これは、あなたの正確な質問に答えていないが、それはあなたが提示した場合の単純な設計である。
たとえば、代わりの
program.exe cin
あなただけ実行します。
program.exe
との代わりに、
program.exe myfile.txt
あなたが実行します。
program.exe < myfile.txt
このは* nixのとWindows上で動作します。
また、ポインタせずにこれを行うことができます:
ifStream inFile;
istream in( argv[1] == "cin" ? cin : inFile.open(argv[1]));
所属していません StackOverflow