【发布时间】:2016-03-04 12:43:23
【问题描述】:
我有一个程序从终端读取输入,来自cin 的流在多个类中用于不同级别的解析。
我不想使用cin 从终端获取数据,而是想读入一个包含我需要解析的信息的文件,但我不想修改所有头文件和 .cpp 文件以接受ifstream& 参数。
为了保留现有代码,我试图简单地将ifstream 重定向到 cin,但不知道如何。
所以假设我在 main 中有以下内容:
ifstream inFile("myfile.txt", ifstream::io);
string line;
while(getline(inFile, line))
{
char firstChar;
inFile >> firstChar;
cout << firstChar;
inFile.ios::rdbuf(cin.rdbuf());
Continue myFile;
}
在我的continue.cpp 我只是在做:
Continue()
{
string line;
cin >> line;
cout << "---remaining line: " << line << "\n";
}
但是它只打印 main 中的第一个字符。
【问题讨论】:
-
"但我不想修改所有头文件和 .cpp 文件以接受 ifstream& 参数。"真不幸。
-
@AmiTavory 啊,好吧,所以没办法了?
-
是的。查看 dup 和 dup2 函数(Windows 的前缀为
_)。我只是在寻找一个例子。 -
@free_mind 可能有一些关于它的黑客攻击。尽管如此,最直接的事情就是在代码中表达您正在使用 istream 的某些(子类)对象。我个人认为,欺骗和东西只是掩盖了这一点。
-
@free_mind 你真的应该将你的课程与
std::cin分离。当您使用它时,您可以让他们使用std::istream而不是std::ifstream进行阅读——这样您就可以同时使用std::cin和std::ifstream。