如何在程序的特定条件下将std::ostream
绑定到std::cout
或std::ofstream
对象?尽管出于许多原因而无效,但我想实现与以下代码在语义上等效的内容:
std::ostream out = condition ? &std::cout : std::ofstream(filename);
我已经看到一些不符合异常安全的示例,比如来自http://www2.roguewave.com/support/docs/sourcepro/edition9/html/stdlibug/34-2.html的一个示例:
int main(int argc, char *argv[])
{
std::ostream* fp; //1
if (argc > 1)
fp = new std::ofstream(argv[1]); //2
else
fp = &std::cout //3
*fp << "Hello world!" << std::endl; //4
if (fp!=&std::cout)
delete fp;
}
有没有人知道一个更好的、异常安全的解决方案?
out
是类的成员,我是否可以以某种方式使用这种方法? - René Nyffeneggerof.open("file.txt");
? - InvisibleWolf