根据 cpp 中的某些条件切换流

Switch streams based on some condition in cpp

本文关键字:条件 cpp 根据      更新时间:2023-10-16

我有一个代码,其中我有两个选项可以从文件或标准输入中读取输入。我想将流从cin切换到fin,以防提供的file_name是有效的。我该如何实现它?这里给出了一个基本的粗略想法代码:

int main(){
string default_file_name = "my_file.txt";
string file_name = get_from_commandline_args();
istream reader; // can't create this as constructor is private
if(file_name == default_file_name) {
ifstream fin; 
fin.open (file_name);
reader = fin;
} else {
reader = cin;
}
while(true) {
// read input
string str;
reader >> str;
}
}

这段代码只是我想要的粗略想法。代码是错误的,因为我们无法创建istream的实例

看起来像是C++中原始指针的有效用例:

int main(){
string default_file_name = "my_file.txt";
string file_name = get_from_commandline_args();
istream* reader = nullptr;
ifstream fin; 
if(file_name == default_file_name) {
fin.open (file_name);
reader = &fin;
} else {
reader = &cin;
}
while(true) {
// read input
string str;
(*reader) >> str;
}
}

只需将具有公共接口的类型设置为指针类型:

istream* reader = nullptr;

相应地更改代码的其余部分。

下面是一个可编译的示例:例如