【发布时间】:2012-02-27 01:50:48
【问题描述】:
我正在尝试创建一个简单的记录器类,并且我希望能够记录到通用 ostream (cout/cerr) 或文件。我想到的设计是允许构造函数采用ostream& 或文件名,在后一种情况下创建一个ofstream& 并将其分配给类的私有ostream&,如下所示:
class Log {
private:
std::ostream& os;
public:
Log(std::ostream& os = std::cout): os(os) { }
Log(std::string filename) {
std::ofstream ofs(filename);
if (!ofs.is_open())
// do errorry things
os = ofs;
}
};
这样做会给我一个错误,即ofstream 的赋值运算符是私有的。再看一遍,我突然想到,对本地对象的引用可能不起作用,并使 os 指向 ostream 并在堆上声明和删除它与 ofstream 案例一起使用,虽然不是 ostream 情况,其中 ostream 已经存在并且只是被 os 引用(因为删除 os 的唯一地方是在构造函数中,我不知道确定os 是否指向在堆上创建的ofstream 的方法。
那么我怎样才能完成这项工作,即让 os 引用 ofstream 在构造函数中使用文件名初始化?
【问题讨论】:
标签: c++ reference ofstream ostream