根据属性选择fstream或cout

Choose fstream or cout depending on attributes

本文关键字:cout fstream 选择 属性      更新时间:2023-10-16

如果有 argv[1],我想将一些数据放在新的 ofstream(argv[1])即带名称 argv[1]的文件中。但是,如果没有这样的参数,我想改用cout

我尝试了

std::ostream& output = argc >= 1 ? std::fstream(argv[0]) : std::cout;

,但由于删除的构造函数,它甚至没有编译。

您可以创建一个fstream实例并延迟打开它直到必要。

std::fstream file;
if (argc > 1)
    file.open(argv[1]);
std::ostream& output = argc > 1 ? file : std::cout;

这是一个真正的C 11解决方案:

ostream& out = [=]() -> ostream& {
    if (argc>1) {
        static fstream fs(argv[1]);
        return fs;
    }
    return cout;
}();

您不能使用具有不同类型的三元运算符。编译器无法决定结果应该具有哪种类型。

您可以尝试

if (argc >= 1)
{
    std::fstream   Output(argv[0]);
    Process_data(Output);
}
else
    Process_data(std::cout);