根据属性选择fstream或cout

时间:2012-10-19 18:50:16

标签: c++ c++11 stream

如果有argv[1]我想将一些数据放到名为ofstream(argv[1])的新argv[1]文件中。但如果没有这样的论点,我想改用cout

我试过

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

但由于删除了构造函数,它甚至无法编译。

3 个答案:

答案 0 :(得分:6)

您可以创建一个fstream实例,并在必要时延迟打开它。

std::fstream file;
if (argc > 1)
    file.open(argv[1]);

std::ostream& output = argc > 1 ? file : std::cout;

答案 1 :(得分:3)

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

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

答案 2 :(得分:2)

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

你可以尝试

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