c ++从ifstream或stringstream读取相同的循环

时间:2015-09-22 23:39:20

标签: c++

我有一个函数需要从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
   }
   ...
   ...

有人说它不会编译。任何人都可以建议一个正确的方法来实现这个目标吗?

1 个答案:

答案 0 :(得分:3)

所有iostreams类都派生自公共基类。输入流都来自istream,输出流都来自ostream。需要处理输入流或输出流的大多数典型函数(但不关心它是来自文件,字符串等)只是处理对istreamostream的引用,像这样:

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);
}