単純なロガー クラスを作成しようとしていますが、汎用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