声明通用istream的在C + +
题
我需要编写一个程序,读取在无论是从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
编写代码,然后使用输入重定向一>运行程序时,如果你想从一个文件中接受输入。这不回答你的问题相关,但它是为你介绍的情况下,简单的设计。
例如,而不是
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