我有一个函数需要从ifstream(磁盘上的文件中的文本)或字符串流(内存中的文本)中读取。
这是我想要做的一个例子:
void myFunction(bool file,stringstream& ss){
ifstream inFile;
string oneline;
if (file == true){
//code to open file with inFile
}
while (getline(file==true?inFile:ss, oneline)){
// ..process lines
}
...
...
有人说它不会编译。任何人都可以建议一个正确的方法来实现这个目标吗?
答案 0 :(得分:3)
所有iostreams类都派生自公共基类。输入流都来自istream
,输出流都来自ostream
。需要处理输入流或输出流的大多数典型函数(但不关心它是来自文件,字符串等)只是处理对istream
或ostream
的引用,像这样:
void myFunction(std::istream &is) {
std::string oneline;
while (getline(is, oneline))
process(oneline);
}
if (file) {
std::ifstream inFile(filename);
myFunction(inFile);
}
else {
std::istringstream fromMemory(...);
myFunction(fromMemory);
}