C++ getline传递文件或cin

tci*_*ler 0 c++ iostream

我搜索了互联网并阅读了几个小时的手册,但我无法弄清楚这一个:

我的程序获得一个可选参数,即文件名.考虑这个条件

std::ifstream file;

if (argc > 1) {
    file.open(argv[1]);
}

if (file.is_open()) {
    processInput(file);
    file.close();
} else {
    processInput(std::cin);
}
Run Code Online (Sandbox Code Playgroud)

在函数中processInput我试图从输入中读取所有行并使用它们执行以下操作:

void processInput(std::basic_istream<char> inputStream) {
    std::string line;
    while (std::getline(inputStream, line)) {
        processLine(line);
    }
}
Run Code Online (Sandbox Code Playgroud)

但我在basic_istream中遇到错误,所以我不知道应该将哪种类型传递给此函数.我只试过盲目的镜头.

Win*_*ute 7

流不可复制.您必须通过引用传递流:

//                                         v-- here
void processInput(std::basic_istream<char> &inputStream) {
Run Code Online (Sandbox Code Playgroud)

顺便说一下,有一种更短的写法std::basic_istream<char>,就是这样

void processInput(std::istream &inputStream) {
Run Code Online (Sandbox Code Playgroud)