如何"parametrize"输出流?

How to "parametrize" an output stream?

本文关键字:输出流 parametrize 如何      更新时间:2023-10-16

如何使此伪代码工作?

std::ostream  ostr;
std::ofstream ofstr;
if(condition) {
    ostr = std::cout;
}
else {
    ofstr.open("file.txt");
    ostr = ofstr;
}
ostr << "Hello" << std::endl;

这不会编译,因为std::ostream没有公共默认构造函数。

在您的情况下,您可以使用三元运算符:

std::ostream& ostr = (condition ?
                      std::cout :
                      (ofstr.open("file.txt"), ofstr)); // Comma operator also used
                                                        // To allow fstream initialization.

此实现可以切换到其他流:

std::ofstream ofstr;
std::ostream *ostr;
ofstr.open("file.txt");
ostr = &ofstr;
*ostr << "test --> filen" << std::endl;
ostr = &std::cout;
*ostr << "test --> stdoutn" << std::endl;