如果文件名可用,我想将输出写入文件,否则在屏幕(stdout)上写。所以我在这个论坛上阅读了帖子并找到了一个代码,下面我将其包含在一个方法中:
std::shared_ptr<std::ostream> out_stream(const std::string & fname) {
std::streambuf * buf;
std::ofstream of;
if (fname.length() > 0) {
of.open(fname);
buf = of.rdbuf();
} else
buf = std::cout.rdbuf();
std::shared_ptr<std::ostream> p(new std::ostream(buf));
return p;
}
代码在就地使用时效果很好。不幸的是,当它被包装到一个单独的方法中时表现得很奇怪(如上所述)。是因为一旦调用完成,方法(of buff)中定义的对象就会被销毁吗?
我在几个地方使用这部分代码,它确实应该被提取为一个单独的非重复片段:方法或类。我怎样才能做到这一点?
答案 0 :(得分:1)
你是正确的,你所遇到的问题来自于of
的破坏。不会像这样(未经测试)工作吗?
std::shared_ptr<std::ostream>
out_stream(const std::string &fname) {
if (fname.length() > 0)
std::shared_ptr<std::ostream> p(new std::ofstream(fname));
else
std::shared_ptr<std::ostream> p(new std::ostream(std::cout.rdbuf()));
}